为什么angular.forEach上下文?

Luc*_*cas 11 javascript foreach angularjs

我正在分析这个angular.forEach功能:

这是代码angular.forEach:

var values = {name: 'misko', gender: 'male'};
var log = [];

angular.forEach(values, function(value, key) {
  this.push(key + ': ' + value);
}, log);

expect(log).toEqual(['name: misko', 'gender: male']);
Run Code Online (Sandbox Code Playgroud)

上下文的描述是:

对象成为迭代器函数的上下文(this).

我想出了一些问题:

为什么使用和何时对参数上下文有用?!

为什么用这个代替日志变量

leo*_*fcx 6

在您提供的示例中,使用this或直接使用它是相同的log array.这是因为callback用于forEach methodlog array定义相同scope.

然而,可能有一些案件中,这callback里面有个不同的定义scopelog array.然后调用应如下所示:

angular.forEach(values, getNames, log);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们应该this在回调内部使用,因为它将引用log array哪个是以不同的方式定义的scope.

编辑:

请参阅此JSFiddle演示以及显示我所解释的代码.

var getNames = function(value, key) {
  this.push(key + ': ' + value);
};

var processObject = function(){
  var log = []; 
  // Now getNames callback is defined in a different 
  // scope than log
  angular.forEach(values, getNames, log);
  return log;
}

var values = {name: 'misko', gender: 'male'};
var resultArray = processObject(values);
// This gives same result as your exmple
alert(resultArray); 
Run Code Online (Sandbox Code Playgroud)