在Node JS中更改函数的上下文

时间:2018-12-01 10:59:13

标签: javascript node.js scope

我正在学习如何从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呢?这些导致上述不同行为的作用域之间有什么区别?

1 个答案:

答案 0 :(得分:1)

  

那么Node JS和浏览器的Global范围有什么不同?

区别在于,脚本不在Node的全局范围内进行评估,而是在模块范围内进行评估,其中this在直接评估时不是全局变量。

在浏览器中,它是this === window。在Node.js中,它是this === module.exports

如果fn是箭头,那么它将在Node.js中为this === module.exports。但是由于它是常规函数,因此在调用fn()时会在全局范围内进行评估。