由于JavaScript函数与对象相同,因此它们在定义它们的位置方面应具有相似的范围。但是,以下代码让我感到困惑:
console.log(lateFunc());
function lateFunc(){
return 'This function comes late!';
};
console.log(lateVar);
var lateVar = 'This variable comes late!';
在这种情况下,lateFunc
和lateVar
都定义为AFTER控制台命令。但是,这是我从node test.js
得到的:
This function comes late!
undefined
第一个控制台识别稍后定义的功能。但是,第二个不识别后面定义的变量。所以我很困惑为什么会这样。它们是否应该具有全局范围或仅在定义后可见?谁能解释一下?
答案 0 :(得分:2)
在JavaScript中,此代码......
console.log(lateVar);
var lateVar = 'This variable comes late!';
实际上等同于......
var lateVar = undefined;
console.log(lateVar);
lateVar = 'This variable comes late!';
解释了为什么会这样。一个像这样定义的函数......
function lateFunc(){
return 'This function comes late!';
};
是不同的,并在整个范围内定义。
希望这有帮助。
答案 1 :(得分:1)
这是由于javascript语言的编译与表达性质的关系。
声明了 function fun1()
,因此它在编译状态后就存在了。
var fun1 = 'sth sth';
是赋值表达式,因此它取决于执行顺序。
<强>来源