我正在学习如何从this slide更改Javascript中的函数上下文。这里给出的示例是完全可以理解的:
var object = {};
function fn(){
return this;
}
console.log( fn() == this) //true
console.log( fn.call(object) == object); //true
但是当我在Node JS中尝试时,结果有些不同。第一个语句的结果为false
,第二个相等的结果按预期运行。那么Node JS和浏览器的Global范围有什么不同?
我知道浏览器的全局范围为window
,但是Node JS呢?这些导致上述不同行为的作用域之间有什么区别?
答案 0 :(得分:1)
那么Node JS和浏览器的Global范围有什么不同?
区别在于,脚本不在Node的全局范围内进行评估,而是在模块范围内进行评估,其中this
在直接评估时不是全局变量。
在浏览器中,它是this === window
。在Node.js中,它是this === module.exports
。
如果fn
是箭头,那么它将在Node.js中为this === module.exports
。但是由于它是常规函数,因此在调用fn()
时会在全局范围内进行评估。