Javascript 为什么在node env和chrome控制台之间运行相同的代码是不同的?
我使用node在终端上运行上述代码,并返回Javascript 为什么在node env和chrome控制台之间运行相同的代码是不同的?,javascript,node.js,google-chrome,scope,Javascript,Node.js,Google Chrome,Scope,我使用node在终端上运行上述代码,并返回undefined 但在chrome控制台中,它将返回Global 为什么会发生这种情况?1.在浏览器环境中运行此脚本会强制顶级变量成为全局窗口对象的属性。然后根据: 由于以下代码未处于严格模式,并且由于调用未设置其值,因此将默认为全局对象,即浏览器中的窗口 所以调用console.log(this.name)表示此将是指向全局窗口对象的链接,该对象将具有名称属性。而window.name的值为“全局” 2.NodeJS没有窗口对象,但它有全局对象。在N
undefined
但在chrome控制台中,它将返回Global
为什么会发生这种情况?1.在浏览器环境中运行此脚本会强制顶级变量成为全局
窗口
对象的属性。然后根据:
由于以下代码未处于严格模式,并且由于调用未设置其值,因此将默认为全局对象,即浏览器中的窗口
所以调用console.log(this.name)该函数中的code>表示此
将是指向全局窗口
对象的链接,该对象将具有名称
属性。而window.name
的值为“全局”
2.NodeJS没有窗口
对象,但它有全局
对象。在NodeJS环境中运行脚本会在两种情况下中断:
(a)作为模块运行(例如通过节点测试.js
)和(b)不作为模块运行(例如直接在节点控制台中)。
第二种情况(b)的工作原理与浏览器相同:global
将接收name
属性,而此
将是指向global
的链接,
因此,this.name
的值将等于global.name
,并且将是“global”
但第一种情况(a)不同,根据:
对象全局名称空间对象
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器变量中,将定义一个新的全局变量。
在Node.js中,这是不同的。顶层范围不是全局范围;var Node.js模块中的某些内容将位于该模块的本地
因此,顶级var在节点环境中仅成为局部变量,并且由于global
没有name
属性,
调用console.log(this.name)
将显示未定义的1。在浏览器环境中运行此脚本将强制该顶级变量成为全局窗口的属性。然后根据:
由于以下代码未处于严格模式,并且由于调用未设置其值,因此将默认为全局对象,即浏览器中的窗口
所以调用console.log(this.name)该函数中的code>表示此
将是指向全局窗口
对象的链接,该对象将具有名称
属性。而window.name
的值为“全局”
2.NodeJS没有窗口
对象,但它有全局
对象。在NodeJS环境中运行脚本会在两种情况下中断:
(a)作为模块运行(例如通过节点测试.js
)和(b)不作为模块运行(例如直接在节点控制台中)。
第二种情况(b)的工作原理与浏览器相同:global
将接收name
属性,而此
将是指向global
的链接,
因此,this.name
的值将等于global.name
,并且将是“global”
但第一种情况(a)不同,根据:
对象全局名称空间对象
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器变量中,将定义一个新的全局变量。
在Node.js中,这是不同的。顶层范围不是全局范围;var Node.js模块中的某些内容将位于该模块的本地
因此,顶级var在节点环境中仅成为局部变量,并且由于global
没有name
属性,
调用console.log(this.name)
显示顶级作用域中的未定义的var
定义了全局对象中的变量
匿名函数调用中的此
在浏览器或交互式节点会话中指向全局对象
,但在脚本作为节点模块运行时指向导出对象
直到严格模式…var
在顶级范围中定义全局对象中的变量
匿名函数调用中的此
在浏览器或交互式节点会话中指向全局对象
,但在脚本作为节点模块运行时指向导出对象
直到严格模式…抱歉,只需编辑代码,它将打印全局然后未定义,为什么?我在节点(0.12.4)和Chrome中看到日志消息Global
,后跟返回值undefined
。你能展示一下Node的功能吗?在任何环境中,funcA()()
都没有返回值(除了由于缺少返回值而导致的默认未定义的)function(){console.log(this.name);}
中没有return
语句。另外,请注意,这将在浏览器代码中字符串化。(这不是问题,因为它是一个字符串,但可能会给其他类型带来麻烦。)您是否将此代码作为模块运行?(模块中的顶级变量不是全局变量,这可以解释为什么会记录不同的值。)@apsillers我相信他是通过node test.js
运行它的。抱歉,只需编辑代码,它就会打印全局变量,然后打印未定义的变量,为什么?我在两个节点中都看到日志消息global
,后面是返回值undefined
(0.12.4)和Chrome。可以显示节点的屏幕截图吗?在任何环境中,funcA()()
都没有返回值(除了默认的未定义的返回值之外)。函数()
var name = "Global";
function funcA() {
var name = "FunA";
return function() {
console.log(this.name);
}
}
funcA()();