JavaScript函数和变量范围

时间:2014-02-02 04:42:01

标签: javascript

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

console.log(lateFunc());

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

console.log(lateVar);

var lateVar = 'This variable comes late!';

在这种情况下,lateFunclateVar都定义为AFTER控制台命令。但是,这是我从node test.js得到的:

This function comes late!
undefined

第一个控制台识别稍后定义的功能。但是,第二个不识别后面定义的变量。所以我很困惑为什么会这样。它们是否应该具有全局范围或仅在定义后可见?谁能解释一下?

2 个答案:

答案 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';是赋值表达式,因此它取决于执行顺序。

<强>来源

JavaScript function declaration and evaluation order