JavaScript函数和变量范围

JavaScript函数和变量范围,javascript,Javascript,由于JavaScript中的函数与对象相同,因此它们的定义范围应该相似。但是,以下代码让我感到困惑: console.log(lateFunc()); function lateFunc(){ return 'This function comes late!'; }; console.log(lateVar); var lateVar = 'This variable comes late!'; 在这种情况下,lateFunc和lateVar都是在控制台命令之后定义的。然而,这

由于JavaScript中的函数与对象相同,因此它们的定义范围应该相似。但是,以下代码让我感到困惑:

console.log(lateFunc());

function lateFunc(){
    return 'This function comes late!';
};

console.log(lateVar);

var lateVar = 'This variable comes late!';
在这种情况下,
lateFunc
lateVar
都是在控制台命令之后定义的。然而,这是我从node test.js中得到的:

This function comes late!
undefined

第一个控制台识别稍后定义的函数。但是,第二个变量不能识别后面定义的变量。所以我不明白为什么会这样。它们不应该都具有全局范围或仅在定义后可见吗?有人能解释一下吗

在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!';
};
是不同的,是在整个范围内定义的


希望这能有所帮助。

这是由于javascript语言的编译与表达式性质

声明了函数fun1(),因此它自编译状态起就存在

var fun1='sth'
是一个赋值表达式,因此它取决于执行顺序

来源


变量不是以后定义的,而是以后分配的。可以把它看作是在任何代码实际运行之前正在处理的定义。。。你在这里也得到了答案:定义“before”或“after”是变量而不是函数。