我正在分析这个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']);
上下文的描述是:
对象成为迭代器函数的上下文(this).
我想出了一些问题:
为什么使用和何时对参数上下文有用?!
为什么用这个代替日志变量?
在您提供的示例中,使用this
或直接使用它是相同的log array
.这是因为callback
用于forEach method
和log array
定义相同scope
.
然而,可能有一些案件中,这callback
里面有个不同的定义scope
比log array
.然后调用应如下所示:
angular.forEach(values, getNames, log);
在这种情况下,我们应该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);