JavaScript中this关键字在Node.js与Chrome控制台的行为差异疑问
差异核心原因是两个环境的顶层this指向和全局上下文规则不同
1. Chrome 控制台的表现逻辑
- Chrome 控制台的顶层上下文就是浏览器的全局
window对象,顶层执行this.name = "snehal"本质是给window.name赋值。 - 非严格模式下,没有明确绑定对象的普通函数调用,
this会默认绑定到全局window对象。你直接调用meme()、mem()都属于普通函数调用,两个函数内的this都指向window,所以两次都输出snehal。
2. Node.js 环境的表现逻辑
- Node.js 中每个独立JS文件都是一个单独模块,模块顶层的
this指向的是当前模块的导出对象module.exports,并非全局对象。你在顶层执行this.name = "snehal",实际是给module.exports.name赋值,根本没有写到Node的全局对象global上。 - 非严格模式下普通函数调用的
this默认绑定全局对象的规则在Node中同样生效,所以meme和mem内部的this都指向Node的全局对象global,而global上不存在name属性,自然两次都输出undefined。
如果你想在Node.js文件中复现Chrome的表现,只需要把顶层赋值的代码改成global.name = "snehal"即可。
内容的提问来源于stack exchange,提问作者Snehal singh
相关产品推荐
相关产品推荐

