Javascript 什么是';这';这里有参考资料吗?
我正在读书Javascript 什么是';这';这里有参考资料吗?,javascript,this,Javascript,This,我正在读书 函数baz(){ //调用堆栈是:`baz` //因此,我们的呼叫站点在全球范围内 控制台日志(“baz”); bar();/`bar` //所以,我们的呼叫地点在巴兹` 控制台日志(“bar”); foo();/`bar`->`foo` //所以,我们的通话地点在酒吧` 控制台日志(“foo”); console.log(this); } baz();// “this”指的是调用函数的对象,而不是调用函数的对象。您是否从浏览器(即网页)运行此代码?如果是,那么“this”就是代码运
函数baz(){
//调用堆栈是:`baz`
//因此,我们的呼叫站点在全球范围内
控制台日志(“baz”);
bar();/`bar`
//所以,我们的呼叫地点在巴兹`
控制台日志(“bar”);
foo();/`bar`->`foo`
//所以,我们的通话地点在酒吧`
控制台日志(“foo”);
console.log(this);
}
baz();// “this”指的是调用函数的对象,而不是调用函数的对象。您是否从浏览器(即网页)运行此代码?如果是,那么“this”就是代码运行的窗口。“this”指的是调用函数的对象,而不是调用函数的对象。您是否从浏览器(即网页)运行此代码?如果是这样,那么“this”就是代码运行的窗口。正如凯尔·辛普森(Kyle Simpson)精彩地解释的那样,this
的值仅取决于4个条件,取决于呼叫地点:
var obj = {
foo: function() {
console.log(this);
}
};
function foo() { console.log(this); }
1。使用对象调用(隐式绑定)
obj.foo()
在这种情况下,使用obj
调用foo
(始终注意点运算符前面的对象)。因此,这个
指的是obj
内部的foo
2调用或应用(显式绑定)
foo.call(obj)
这里,函数foo
中的this
指的是obj
,因为它已被显式绑定
3。使用new(新关键字)呼叫
obj=新的foo()
在foo内部,这个
现在指的是新创建的对象
4。全局对象(默认绑定)
foo()
这里直接调用foo
。因此它默认为窗口
。(这是你的案子!)
如您所见,在您的案例中,foo
被直接调用(案例4)。因此此
引用窗口
对象。只要记住这4个案例,你就会很好 正如凯尔·辛普森(Kyle Simpson)精彩地解释的那样,此
的值仅取决于4个条件,取决于呼叫地点:
var obj = {
foo: function() {
console.log(this);
}
};
function foo() { console.log(this); }
1。使用对象调用(隐式绑定)
obj.foo()
在这种情况下,使用obj
调用foo
(始终注意点运算符前面的对象)。因此,这个
指的是obj
内部的foo
2调用或应用(显式绑定)
foo.call(obj)
这里,函数foo
中的this
指的是obj
,因为它已被显式绑定
3。使用new(新关键字)呼叫
obj=新的foo()
在foo内部,这个
现在指的是新创建的对象
4。全局对象(默认绑定)
foo()
这里直接调用foo
。因此它默认为窗口
。(这是你的案子!)
如您所见,在您的案例中,foo
被直接调用(案例4)。因此此
引用窗口
对象。只要记住这4个案例,你就会很好 的确,“bar”是呼叫站点,但您必须查看哪一个应用于呼叫站点。在这种情况下,没有new
绑定。同样,我们也没有看到硬绑定、显式绑定或隐式绑定,因为foo()
不是作为obj.foo()
执行的。因此,这是默认绑定的明显情况,因此此
指向全局对象,即窗口
的确,“bar”是调用站点,但您必须查看哪个应用于调用站点。在这种情况下,没有new
绑定。同样,我们也没有看到硬绑定、显式绑定或隐式绑定,因为foo()
不是作为obj.foo()
执行的。因此,这是默认绑定的明显情况,因此此
指向全局对象,即窗口
窗口。。。。。由于此
属于被调用的方法的所有者
!(如果不考虑.bind/.call/.apply
)这不取决于调用的位置,而取决于调用的方式(调用方式)。在所有3种情况下,函数都被简单地称为本地函数(与方法等相比)–fn()
–因此此
将是默认值,无论是全局对象(浏览器中的窗口
)还是未定义的
(严格模式)。这是在片段后面的几段中讨论的:。这个问题将帮助您解决:——@RayonDabre您可能是说,没有“所有者”这样的东西。调用foo时没有基值或其this,因此在解析其this值时,getBase将返回undefined,其this默认值为全局(浏览器中的窗口)对象,或者在严格模式下保持未定义。@RayonDabre嗯,在将bind(ES5)和arrow函数(ECMAScript 2015)添加到该语言之前都是这样。ECMAScript 2017可能会引入更多变化(或不引入)。;-)窗户。。。。。由于此
属于被调用的方法的所有者
!(如果不考虑.bind/.call/.apply
)这不取决于调用的位置,而取决于调用的方式(调用方式)。在所有3种情况下,函数都被简单地称为本地函数(与方法等相比)–fn()
–因此此
将是默认值,无论是全局对象(浏览器中的窗口
)还是未定义的
(严格模式)。这是在片段后面的几段中讨论的:。这个问题将帮助您解决:——@RayonDabre您可能是说,没有“所有者”这样的东西。调用foo时没有基值或其this,因此在解析其this值时,getBase会将未定义和其this默认值返回到全局(浏览器中的窗口)对象,或者在严格模式下保持未定义。@RayonDa