kev*_*ius 25 javascript foreach function this invocation
我想知道forEach回调函数的'this'值(或调用上下文)是什么.此代码似乎不起作用:
var jow = [5, 10, 45, 67];
jow.forEach(function(v, i, a){
this[i] = v + 1;
});
alert(jow);
Run Code Online (Sandbox Code Playgroud)
谢谢你向我解释.
Tib*_*bos 45
MDN声明:
array.forEach(callback [,thisArg])
如果向forEach提供thisArg参数,则它将用作每个回调调用的this值,就像调用callback.call(thisArg,element,index,array)一样.如果thisArg未定义或为null,则函数中的此值取决于函数是否处于严格模式(如果处于严格模式则传递值,如果处于非严格模式则传递全局对象).
简而言之,如果你只提供回调并且你处于非严格模式(你提出的情况),那么它将是全局对象(窗口).
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
如果不将第二个参数传递给forEach,this将指向全局对象。为了实现你想要做的事情
var jow = [5, 10, 45, 67];
jow.forEach(function(v, i, a) {
a[i] = v + 1;
});
console.log(jow);
Run Code Online (Sandbox Code Playgroud)
输出
[ 6, 11, 46, 68 ]
Run Code Online (Sandbox Code Playgroud)
里面的forEach,this指的是全局window对象。即使您从不同的对象(即您创建的对象)调用它也是如此
window.foo = 'window';
var MyObj = function(){
this.foo = 'object';
};
MyObj.prototype.itirate = function () {
var _this = this;
[''].forEach(function(val, index, arr){
console.log('this: ' + this.foo); // logs 'window'
console.log('_this: ' + _this.foo); // logs 'object'
});
};
var newObj = new MyObj();
newObj.itirate();
// this: window
// _this: object
Run Code Online (Sandbox Code Playgroud)