angular中,在controller里定义对象,var xx和$scope.xx的区别


如果一个对象不需要在页面中用到,

直接用var xx;

那么该对象的作用域有多大


9.25补充

先上代码:


 app.controller('MainCtrl', function($scope) {
    $scope.name = "x";
    var name1 = 'xx';
    $scope.foo = function() {
        var name2 = 'xxx';
        console.log(name1);
        console.log(name2);
    };
});

$scope 定义范围基本上明白了
那么 name2 范围呢?在foo这个函数内?
name1 的范围呢?

web前端开发 angularjs JavaScript

毁灭之格雷希尔 9 years, 8 months ago

$scope 是AngularJS自动帮你创建的对象,主要用于数据双向绑定,他的作用域是在controller或者directive控制的模板区域,简单理解是某个模板区域的数据绑定上下文,你自己通过var定义的变量作用域在当前函数内部,和$scope不是一个级别的东西,也就无所谓区别了。

好吃的妖梦 answered 9 years, 8 months ago

我的简单理解是,而 var 定义的变量,仅仅是当前作用域。

$scope 是被「输出」的,比到view中,到watcher中。

(问题其实有点问题,$scope.xx不是变量。)

路痴型夏夜 answered 9 years, 8 months ago

Scope的定义大致如下(极简版):


 // Generated by CoffeeScript 1.7.1
(function() {
  var Scope;

  Scope = (function() {
    function Scope() {
      this.$$watchers = [];
    }

    Scope.prototype.$watch = function(watcher, listener) {
      return this.$$watchers.push({
        watchFn: watcher,
        listenrFn: listener
      });
    };

    Scope.prototype.$digest = function() {
      return this.$$wathcers.forEach(function(watcher) {
        return watcher.watchFn();
      });
    };

    return Scope;

  })();

}).call(this);

在Scope外定义的内容没法watch和digest。

——————————————————————————9.25补充

楼主后来问的问题就跟angular无关了,属于变量作用域的问题。匿名函数内的定义的变量只在该函数内起作用。

详情请戳 http://octsky.com/post/63/

小狐狸D摇篮 answered 9 years, 8 months ago

变量作用域参照 js 规范说明, var 和 $scope 区别,主要就是 $scope 上的变量能被一些 watcher 检测到变化,如果有的话。

月龄14.8 answered 9 years, 8 months ago

Your Answer