gpt4 book ai didi

javascript - 为什么函数在全局对象中不可用?

转载 作者:搜寻专家 更新时间:2023-10-31 22:46:23 24 4
gpt4 key购买 nike

根据它是从 Node js shell 运行还是存储在传递给 Node 的脚本文件中,此脚本具有不同的行为。

脚本:

var a = 1;
function b(){return 1;}
for(var k in global) console.log(k);

shell 中的输出(只有最后 4 行与 IMO 相关。这 3 行中的每一行都按顺序复制/粘贴到在 Mac OS X 终端中运行的 Node REPL 实例中):

ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console
module
require
a
_
b
k

作为保存的脚本运行时的输出(在 Mac OS X 上从 bash 调用 node myscript.js):

ArrayBuffer
Int8Array
Uint8Array
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
DataView
global
process
GLOBAL
root
Buffer
setTimeout
setInterval
clearTimeout
clearInterval
console

为什么它们不同,为什么我的脚本在 global 中看不到 ab

编辑:添加附加语句 c = 2 更改了输出。 c 在运行脚本的两种方法中都是可见的。不过,这仍然无法解释从 shell 运行脚本时 a 和 b 的存在。

最佳答案

基本上这是因为 Node 的 REPL 使用“全局”上下文,因为它是“this”(您可以使用 global === this 进行测试)。

但是,常规模块在它们自己单独的闭包中运行。所以你可以想象它是这样的东西:

function (module, exports, global) {
// your module code
}

因此,当您在您的代码中定义一个 var 并将其作为脚本执行时,您实际上只是在函数闭包内定义它。但是在 REPL 中,您是在全局级别定义 var。

关于javascript - 为什么函数在全局对象中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com