当函数附加到对象并被调用时:
function f() { return this.x; }
var o = {x: 20};
o.func = f;
o.func(); //evaluates to 20
this
指的是函数被调用为方法的对象。这相当于执行 f.call(o)
。
当函数不是作为对象的一部分被调用时,this
指的是全局对象。如何检查是否从非对象上下文调用函数?是否有任何标准关键字来访问全局对象?这样做的唯一方法是这样吗?
globalobj = this;
function f() { if (this == globalobj) doSomething(); }
注意:我在这里没有特别的用例 - 我实际上是在问这个确切的机制。
最佳答案
下面应该可以工作,因为使用值为 null 的 Function.call 将在全局范围内调用它。
this === ((function () { return this; }).call(null))
一个更简单的变体,
this === (function () { return this; })()
也会起作用,但我认为第一个使意图更清晰。
关于JavaScript - 检查是否在全局上下文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383185/