我知道var是nodejs中的一个全局变量,它可以在任何地方访问。
然而,我被以下的例子弄糊涂了
在下文中,global_1是全局变量,因此可以在不混淆的情况下访问它。
var global_1 =1
function2 = () => {
console.log('global_1 in function2: ' + global_1)
}
main = () =>{
console.log('global_1 in main: ' + global_1)
function2()
}
main()
但如果我把函数2放在help.js中;它表示global_ 1是未定义的;当我导入helper函数时,效果不是和上面的代码一样吗?我把函数2粘贴在同一个文件中?
const helper = require('./helper');
var global_1 =1
main = () =>{
console.log('global_1 in main: ' + global_1)
helper.function2()
}
main()
至于let和const,我的理解是它们只能在{}中访问
但现在,global_1仍然可以被function2访问,即使global_1没有在function2内部定义。难道只有var可以在任何地方访问吗?let,const只能在{}内访问吗?
var global_1 =1
or let global_1 =1
or const global_1 =1
function2 = () => {
console.log('global_1 in function2: ' + global_1)
}
main = () =>{
console.log('global_1 in main: ' + global_1)
function2()
}
main()
我知道var是nodejs中的一个全局变量,它可以在任何地方访问。
你错了。
函数内部的var
声明了一个作用域为该函数的变量。
函数外的var
声明了一个作用域为该模块的变量。
(T.J.指出,有一种边缘情况,如果你在全局上下文(例如node < yourModule.js
(中运行代码,而不是将其作为普通模块(node yourModule.js
(加载,那么它将不会被视为模块,函数外的var
将创建全局(。
但如果我把函数2放在help.js中;它表示global_ 1是未定义的;当我导入helper函数时,效果不是和上面的代码一样吗?我把函数2粘贴在同一个文件中?
否。
变量是";在范围内";由定义的函数所在位置决定,而不是由调用函数的位置决定。
至于let和const,我的理解是它们只能在{}中访问
否。
不能在定义它们的块之外访问它们。
在您的示例中,它们是在任何显式块之外定义的,为了这些目的,是否将整个模块视为块。
var a = 1;
function b () {
var c = 2;
let d = 3;
if (a) {
let e = 4;
var f = 5;
// a b c d e and f are available here
}
// a b c d and f are available here
// e isn't because it is block scoped and this is outside the block
}
// a and b are available here.
// Everything else is scoped to either the function b or the block
// connected to the if statement inside it