为什么是 angular.foreach context
Why angular.forEach context?
我正在分析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
的定义可能与log array
scope
不同。然后,调用应如下所示:
angular.forEach(values, getNames, log);
在这种情况下,我们应该在回调中使用this
,因为它将引用在不同scope
中定义的log array
。
编辑:
请参阅此 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);
从未使用过angular.forEach((,但它看起来很简单。
var hello = {
message: 'Ok'
};
angular.forEach([' I', ' said', ' hello'], function (value) {
this.message += value;
}, hello);
console.log(hello.message);
1/它将记录"好的,我说你好",所以基本上"上下文"参数将允许您更新您将引用的任何对象。用例非常广泛...
2/我认为这与执行上下文有关,也就是词法环境,这意味着this
必须与 angular.forEach 的实现方式相关。只需检查angularjs源代码。
相关文章:
- Foreach无法在Typescript中工作
- $rootScope未使用forEach进行更新
- 如何制作简单的php'在Javascript中的foreach等价物
- 用独立变量敲除foreach绑定
- Knockout.JS标签在foreach内部不起作用
- 在foreach中获取ajax结果
- 如何在foreach循环中对每个产品单独应用评级系统
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 错误:Can't在从forEach循环发送标头后设置标头
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 在foreach中加载所有项后,Knockoutjs组件回调
- Javascript:foreach跳过第一个索引(0)
- 嵌套foreach逐字母读取值,而不是整个单词
- Foreach无法在php和Jquery中工作
- 如何在PHP foreach中使用ajax
- 在输入forEach(javascript)时重置变量
- Foreach循环只返回最后一个值
- ko.com在foreach$data变量上添加了write函数
- 复选框:使用Array.prototype.forEach调用推送选中订单,
- 为什么是 angular.foreach context