0
(function(){
  var outer = 'foo';
  (function(){
    var inner = 'bar';
    return [inner, outer];
  })();
})();

上面的代码创建了一个缓慢的分辨率,因为内部函数#outer 需要首先检查最近的对象并查看它不包含“外部”,然后在下一级作用域链中查找变量。

以下角度代码的行为方式是否完全相同?如果是这样,那么我们应该提防范围创建和范围链变量查找吗?

angular.module('app', [], function($rootScope){
    $rootScope.rootVar = 'root Variable';
})
.controller('ctrl1', function($scope){
    $scope.var1 = rootVar;
})
.controller('ctrl2', function($scope){ //nested
    $scope.var2 = rootVar;
})
4

1 回答 1

1

在 Angular 中,您不会以相同的方式创建内部范围,而是传递一个包含“范围”的变量。所以你不能只引用rootVar,它在当前函数范围内不存在,除了作为$scope你传入的属性。所以你需要将你的引用更改为

angular.module('app', [], function($rootScope){
    $rootScope.rootVar = 'root Variable';
})
.controller('ctrl1', function($scope){
    $scope.var1 = $scope.rootVar;
})
.controller('ctrl2', function($scope){ //nested
    $scope.var2 = $scope.rootVar;
})
于 2013-10-07T17:29:14.927 回答