node中this的指向

问题描述

node下this的指向问题,其他的我都知道,不过如果直接定义局部变量呢,这个局部变量怎么获取到呢,是存放在哪里的。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
var name = 1
console.log(name)
console.log(this.name)
console.log(global.name)

你期待的结果是什么?实际看到的错误信息又是什么?

1,undefined,undefined
阅读 4.1k
4 个回答

与浏览器中 js 运行情况一样,只有一点区别,就是浏览器中 window 顶层对象变成了 node 中的 global 顶层对象。

浏览器中:console.log(this) -> window
node 中:console.log(this) -> global

另外,浏览器中无模块化,而 node 中有模块化,这在声明变量是略有不同。

node 中:var name = 'name';
浏览器中:(function(){ var name = 'name' })();

  1. node中全局对象是global,浏览器中全局对象是window
  2. node代码是有模块化的,所以name不会绑定都全局对象global中,所以console.log(name)是1,其余都是undefined,浏览器代码严格模式下同样不会绑定到window上
  3. 虽然是例子,但变量命名还是要有一定意义,name='Tom'更好一点,养成一个好习惯

js是window
node是global

在Node.js中也是分REPL环境和node文件环境的,这两种情况不一样。具体原因是REPL其实是用了vm包了一层,而Node.js在vm中的var赋值直接就挂在global上了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏