我的AngularJS代码看起来像这样:
module.directive('myDir', ['$rootScope', function($rootScope)
{
return{
restrict: 'A',
link: function(scope, el, attrs, controller) {
}
}
}]);
这个编译没有问题。但是,如果我在return语句后放置一个新行,则会发生异常。为什么?:
module.directive('myDir', ['$rootScope', function($rootScope)
{
return
{
restrict: 'A',
link: function(scope, el, attrs, controller) {
}
}
}]);
编辑:这似乎是AngularJS中的一个bug。
2条答案
按热度按时间ibps3vxo1#
AngularJS不运行JavaScript文件-您的浏览器会这样做。它甚至不会解释它们-您的浏览器也会这样做。一个换行符产生这样的行为是极不可能的。
然而,Javascript确实有一个特性,它会让很多来自其他语言(如Java)的开发人员绊倒,这些语言会更严格地执行诸如JavaScript之类的东西。在JavaScript中,在许多情况下,子对象被认为是“可选的”-它们隐含在大多数行的末尾。问题是,这意味着代码格式是必不可少的,一个好的IDE也是如此-它将帮助您捕获这样的问题。
如果你将代码粘贴到Plnkr中,你会立即看到错误:http://plnkr.co/edit/QBqe8qqZQkxy52AKPdj9
比较其他两个文件(fixed.js和better.js),看看不同的格式。你有两个隐含的问题,其中之一是你的问题的根源。在JavaScript中,你不能这样做:
开始一个将由return语句返回的对象。Return本身就是一个语句,不返回任何东西是完全有效的。JavaScript解释器会在这里放置一个隐含的参数,并在函数的其余部分爆炸,因为它将不再有效。
htzpubme2#
我想跟进一下,我也复制了这种行为,在返回后的换行符确实会生成这个运行时错误!
我可以提供html文件和小的angular.js文件,在文件的开头包含以下行:
/**