JavaScript-函数是否可以分别视为执行上下文?
Does a JavaScript-function can be seen as an execution context respectively as this?
在下面的示例中,为什么函数 outer
作为方法分配给具有标识符 meth
的对象-属性 没有执行上下文inner
函数中的 this
?
由于分配给 meth
的函数 outer
似乎自动将 this
-关键字设置为周围对象作为执行上下文,您可以假设函数 inner
以相同的方式处理,或者是因为周围的函数不能被视为执行上下文,因此 JavaScript 不知道函数 inner
它在哪个执行上下文中,所以它采用默认值,即 window
?
var foo = {
meth: function outer() {
console.log(this);
// let that = this;
function inner() {
console.log(this);
}
inner();
}
};
//Output
{meth: ƒ}
Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
提前感谢您的揭秘
当您看到这段代码时:
function inner() {
console.log(this);
}
inner();
该代码是否出现在另一个函数体中,或者该函数体是否属于某个对象的方法等,这些都无关紧要。这是无关紧要的。
相关的是你如何调用 inner
。你称它不是 someobject.inner()
,也不是显式绑定,比如 inner.call(this)
,...所以没有 this
的绑定,因此你得到默认绑定,即 window
object when 运行 in sloppy mode, or undefined
in strict mode.
The function outer
assigned to meth
seems to automatically get the this
-keyword set to the surrounding object as execution context
这个不放心。如果你这样做:
let outer = meth.outer;
outer();
...然后您会注意到 this
也获得了默认绑定。同样,这取决于您如何调用 函数。
如果你用点符号调用它,那么你就隐式地将它与对象绑定:
meth.outer();
所以现在 this
在 outer
的执行上下文中将是 meth
。
在下面的示例中,为什么函数 outer
作为方法分配给具有标识符 meth
的对象-属性 没有执行上下文inner
函数中的 this
?
由于分配给 meth
的函数 outer
似乎自动将 this
-关键字设置为周围对象作为执行上下文,您可以假设函数 inner
以相同的方式处理,或者是因为周围的函数不能被视为执行上下文,因此 JavaScript 不知道函数 inner
它在哪个执行上下文中,所以它采用默认值,即 window
?
var foo = {
meth: function outer() {
console.log(this);
// let that = this;
function inner() {
console.log(this);
}
inner();
}
};
//Output
{meth: ƒ}
Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
提前感谢您的揭秘
当您看到这段代码时:
function inner() {
console.log(this);
}
inner();
该代码是否出现在另一个函数体中,或者该函数体是否属于某个对象的方法等,这些都无关紧要。这是无关紧要的。
相关的是你如何调用 inner
。你称它不是 someobject.inner()
,也不是显式绑定,比如 inner.call(this)
,...所以没有 this
的绑定,因此你得到默认绑定,即 window
object when 运行 in sloppy mode, or undefined
in strict mode.
The function
outer
assigned tometh
seems to automatically get thethis
-keyword set to the surrounding object as execution context
这个不放心。如果你这样做:
let outer = meth.outer;
outer();
...然后您会注意到 this
也获得了默认绑定。同样,这取决于您如何调用 函数。
如果你用点符号调用它,那么你就隐式地将它与对象绑定:
meth.outer();
所以现在 this
在 outer
的执行上下文中将是 meth
。