为什么以及何时将函数定义解释为JavaScript中的声明

时间:2014-09-10 19:27:02

标签: javascript frontend

举个例子:

var is_android = true;
if (is_android) {
    function foo() {
        alert('I am Android');
    }
} else {
    function foo() {
        alert('I am NOT Android');
    }
}
foo();

它将被解释为

function foo() {
    alert('I am Android');
}
function foo() {
    alert('I am NOT Android');
}
var is_android;

is_android = true;
if (is_android) {

} else {

}
foo();

它会警告“我不是Android”;看起来第二个foo定义会覆盖第一个foo定义。

它将函数定义视为声明,我的问题是,这种情况何时会发生,或者总是如此?如何使javascript将某些东西视为函数定义?

感谢。

1 个答案:

答案 0 :(得分:4)

函数声明始终提升到包含范围的顶部。如果您希望它是有条件的,您应该使用作业:

var is_android = true;
var foo;
if (is_android) {
    foo = function() {
        alert('I am Android');
    }
} else {
    foo = function() {
        alert('I am NOT Android');
    }
}
foo();