gpt4 book ai didi

javascript - 为什么是 angular.forEach 上下文?

转载 作者:可可西里 更新时间:2023-11-01 02:24:31 24 4
gpt4 key购买 nike

我正在分析 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']);

上下文的描述是:

Object to become context (this) for the iterator function.

我提出了一些问题:

为什么使用参数 context 以及何时有用?!

为什么要使用this 而不是log 变量

最佳答案

在您提供的示例中,使用this 或直接使用log array 是一样的。这是因为 forEach 方法 中使用的 callbacklog array 是在相同的 scope 中定义的。

但是,在某些情况下,回调 可能是在与日志数组 不同的范围 中定义的。然后调用应如下所示:

angular.forEach(values, getNames, log);

在这种情况下,我们应该在回调中使用 this,因为它将引用在不同的 scope 中定义的 log array

编辑:

看到这个 JSFiddle demo 以及显示我所解释内容的以下代码。

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);

关于javascript - 为什么是 angular.forEach 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com