Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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 这个关键字在函数调用链上是如何工作的?_Javascript_This - Fatal编程技术网

Javascript 这个关键字在函数调用链上是如何工作的?

Javascript 这个关键字在函数调用链上是如何工作的?,javascript,this,Javascript,This,我在凯尔·辛普森的《你不知道JS系列》中读到了这个关键词。在书中,他在this关键字上解释的一个概念是默认绑定。函数对象中使用的this关键字基于函数的调用位置。如果函数调用发生在全局作用域上,则被调用函数中使用的this关键字表示全局作用域。 考虑这个例子, var a=100; function fun(){ var a=10; console.log(this.a); } fun(); // outputs 100 现在我试着更好地理解这个例子 var a=100

我在凯尔·辛普森的《你不知道JS系列》中读到了这个关键词。在书中,他在this关键字上解释的一个概念是默认绑定。函数对象中使用的this关键字基于函数的调用位置。如果函数调用发生在全局作用域上,则被调用函数中使用的this关键字表示全局作用域。 考虑这个例子,

var a=100;

function fun(){
    var a=10;
    console.log(this.a);
}

fun();   // outputs 100
现在我试着更好地理解这个例子

var a=100;

function f1(){
   console.log(this.a);
}

function f2(){
   var a=10;
    f1();
}

f2();         // outputs 100 and not 10. Why?

由于对函数f1的调用发生在函数f2的上下文中,因此我认为函数f1中的.a可能会输出到10。但它却输出到100。这是怎么发生的

f1将记录全局this.a,该值为100,因为f1中没有其他a赋值。由于仍在f2()函数内部调用f1(),因此f1仍读取全局a,即100。你有f2(){a=10};
并称之为f2();你将返回10。不要在f2函数中调用f1(),但要记住包含console.log(this.a);在这两个功能中

var a=100是在全局范围内定义的变量,可供任何函数访问。
var a=10
是一个局部变量,定义在
f2
函数范围内,仅在该函数内部可用


this.a
将全局变量引用为局部变量
a
f2
函数范围内定义的
f1
中不可用
f2
var a
无法绑定到f1的
f2的
var a
只是
f2
范围内的一个局部变量,它与
这个
关键字无关,因为它只是一个正常的局部变量


您不知道JS中提到的隐式绑定,这是使用
this
关键字的最常见方式。这本书的意思是,
this
关键字只取决于使用点符号引用的对象,在您的示例中,因为调用
f1
时没有附加任何对象,唯一可以应用于它的规则是默认绑定。

topmost的作用域,即this.a对于每个函数都是全局的,因为每个函数的this都是相同的。现在,您的下一个“a=10”也是f1本地的。所以打印相同的值。那么隐式绑定是如何工作的呢?考虑,var a=100;函数foo(){console.log(this.a);}var obj={a:42,foo:foo};obj.foo();//42 . Foo在对象obj的上下文中被调用,类似于在f2函数的上下文中被调用的f1?obj a被重新分配到42,您正在调用obj.Foo,它正在调用对象内部的变量。