return后的新行导致编译错误



我的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。

AngularJS不运行Javascript文件——这是你的浏览器做的。它甚至不解释它们——你的浏览器也这样做。换行符极不可能产生这样的行为。

然而,Javascript确实有一个特点,使许多来自其他语言(如Java)的开发人员更严格地执行分号等内容…在Javascript中,分号在很多情况下被认为是"可选的"——它们隐含在大多数行的末尾。问题是,这意味着代码格式化是必不可少的,也是一个好的IDE——它将帮助您捕获此类问题。

如果你把你的代码粘贴到Plnkr中,你会立即看到错误:http://plnkr.co/edit/QBqe8qqZQkxy52AKPdj9

比较其他两个文件(fixed.js和better.js),看看不同的格式。你有两个隐含的分号,其中一个是你的问题的根源。在Javascript中你不能这样做:

return
{

来启动一个对象,该对象将由return语句返回。Return本身就是一个语句,它完全可以不返回任何东西。Javascript解释器将在这里放置一个隐含的分号,并在函数的其余部分弹出,因为它将不再有效。

最新更新