Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在obj中出现这一点?_Javascript_This_Scopes - Fatal编程技术网

Javascript 为什么在obj中出现这一点?

Javascript 为什么在obj中出现这一点?,javascript,this,scopes,Javascript,This,Scopes,在forEach循环中,我非常困惑为什么这会指向obj 我假设输出将返回this.id未定义,因为它是在词法函数中调用的此将指向窗口 function foo(el) { console.log( el, this.id); } var obj = { id: "awesome" }; [1, 2, 3].forEach( foo, obj ); // 1 "awesome" 2 "awesome" 3 "awesome" // Easy way to check

在forEach循环中,我非常困惑为什么这会指向obj

我假设输出将返回this.id未定义,因为它是在词法函数中调用的将指向窗口

function foo(el) {
  console.log( el, this.id);
}

 var obj = {
   id: "awesome"
 };

 [1, 2, 3].forEach( foo, obj );
 // 1 "awesome" 2 "awesome" 3 "awesome"


 // Easy way to check
 [1, 2, 3].forEach( function(el){
   console.log( el, this.id);
 }, obj);

Array.prototype.forEach
的第二个参数是
thisArg
。请参见哪些国家:

如果为forEach()提供了thisArg参数,则它将用作回调函数的this值


您明确告诉它使用
obj
作为
this
。这就是
forEach
的第二个参数的作用。在forEach方法中,第二个参数应该用于数组的索引。为什么对象变量可以在第二个参数中使用?请参见forEach syantax。第一个参数是回调函数,第二个参数是执行回调时的值。太好了。分享forEach语法规则。太好了。我明白了。