Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在node env和chrome控制台之间运行相同的代码是不同的?_Javascript_Node.js_Google Chrome_Scope - Fatal编程技术网

Javascript 为什么在node env和chrome控制台之间运行相同的代码是不同的?

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

我使用node在终端上运行上述代码,并返回
undefined
但在chrome控制台中,它将返回
Global


为什么会发生这种情况?

1.在浏览器环境中运行此脚本会强制顶级变量成为全局
窗口
对象的属性。然后根据:

由于以下代码未处于严格模式,并且由于调用未设置其值,因此将默认为全局对象,即浏览器中的窗口

所以调用
console.log(this.name)表示
将是指向全局
窗口
对象的链接,该对象将具有
名称
属性。而
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)表示
将是指向全局
窗口
对象的链接,该对象将具有
名称
属性。而
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()();