当前位置:  开发笔记 > 编程语言 > 正文

为什么angular.forEach上下文?

如何解决《为什么angular.forEach上下文?》经验,为你挑选了1个好方法。

我正在分析这个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).

我想出了一些问题:

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

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



1> leo.fcx..:

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

然而,可能有一些案件中,这callback里面有个不同的定义scopelog 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); 

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有