在JavaScript中将JavaScript传递给Closure

时间:2014-08-18 13:09:42

标签: javascript angularjs

我正在学习如何实际使用JavaScript。我遇到了一个错误的情况。错误是:TypeError: 'undefined' is not an object (evaluating 'this.flagged')。我已经将代码缩小到了发生的地方。我的代码如下所示:

var flagged = false;
var intervals = [];

return {
  flagged: flagged,
  intervals: intervals,

  createInterval : function (options) {
    var defer = $q.defer();
    if (this.throwsError) {
      defer.reject('There was an error creating the interval.');
    } else {
      this.intervals.push(
        $interval(function() {
          console.log('here 1');
          console.log(this.flagged); 
        },
        1000
      ));
    }
  }
};

错误在console.log(this.flagged);被抛出我猜测它与" this"" this"不可见。然而,如果" flagged"不可见,我不确定如何获取flagged的值。有人可以向我解释我需要做些什么才能获得{{1}}的价值?

谢谢!

2 个答案:

答案 0 :(得分:1)

当您在this内使用$interval时,它不会指向您的原始对象,但是,您可以这样做:

var flagged = false;
var intervals = [];

return {
  flagged: flagged,
  intervals: intervals,

  createInterval : function (options) {
    var defer = $q.defer(),
        self = this;
    if (this.throwsError) {
      defer.reject('There was an error creating the interval.');
    } else {
      this.intervals.push(
        $interval(function() {
          console.log('here 1');
          console.log(self.flagged); 
        },
        1000
      ));
    }
  }
};

请注意var self = this;

答案 1 :(得分:0)

在JavaScript中,

var flagged

将是一个范围变量,我认为你需要的是一个全局范围变量,只需从它后面删除var。

flagged = false;

应该做的伎俩。