function a() {
return this;
}
function b() {
return this;
}
console.log(a() === b()) //true on browser and node
但是......
function a() {
return "inside a";
}
function b() {
console.log(this.a()); //logs undefined on node, 'inside a' on browser
}
这对浏览器和节点都运行非严格模式。
答案 0 :(得分:3)
this
的值取决于函数的调用方式。它与如何定义函数几乎没有关系。
如果你将一个函数称为像
这样的普通函数 a()
然后,如果在严格模式下运行,函数this
内的a
值将是全局对象或undefined
。
以下是this
可以控制的方式:
a()
this
将是全局对象或undefined
。
obj.a()
this
将设置为对象obj
。
obj.a.call(obj, arg1, arg2)
obj.a.apply(obj, array)
this
将设置为作为.call()
或.apply()
的第一个参数传递的对象
var m = obj.a.bind(obj)
m();
this
将被设置为作为.bind()