为什么angularjs的作用域是允许在初始化之前访问变量

Why angularjs scoping is allow access variable before initialization

本文关键字:初始化 访问 变量 angularjs 作用域 为什么      更新时间:2023-09-26

当在angular js包含的html文件中执行此代码片段时。

<p>{{a}} remains {{a = 2;}}</p>

它没有通过引用错误异常。

但是angularjs是在普通js的基础上构建的,为什么会有这样的微妙呢?

下面是纯js中的等效代码:

alert(a);
a = 2;

作为我的期望,而执行这通过引用错误异常,但为什么不angularjs.

因为你的第一个angular模板片段不是javascript的直接声明,它是由angular的模板引擎计算的。而且,它不会产生javascript错误输出,因为当你第一次写{{a}}时,你为范围内的变量a创建了一个模板引擎输出,这在当时是未定义的。但是,当你写{{ a = 2; }}时,你触摸作用域来声明a,这使得角引擎重新绘制代码片段并应用一个新的绑定值,并在{{a}}代码片段上产生一个有效的输出。

例如:

<p ng-controller="AppCtrl">{{a}} remains {{ declare(); }}</p>
angular.module('app', [])
  .controller('AppCtrl', 
    ['$scope', '$timeout',
      function ($scope, $timeout) {
        $scope.declare = function (){
          $timeout(function(){$scope.a = 2;}, 2000);
        }
  }]);

此代码在第一时间将生成remains,在模板求值后2秒将生成2 remains