函数声明未定义-原因

Function declaration undefined - Why?

本文关键字:原因 未定义 声明 函数      更新时间:2023-09-26

我得到了一个传递给变量的相当标准的init函数。

var initFunction=函数()。。。

这和"function initFunction(){}"是一样的,不是吗?(内部,JavaScript也创建一个变量)

如果我在init函数中声明了一个函数变量,并在声明之前调用它,那么它必须是可访问的,因为函数中的所有定义(var)都是首先初始化的。这就是我认为JS的本质。

以下代码不起作用(innerFunction未定义)

var initFunction = function(){
    if(0 == 0){
        innerFunction();
    }
    var innerFunction = function(){
        alert("Hello World");
    };
};
initFunction();

顺便问一下:用分号关闭所有函数是否是一种好的做法?

向致以最良好的问候

这里的问题被称为可变吊装。当你这样做:

var innerFunction = function(){
    alert("Hello World");
};

呼叫时间为:

var innerFunction = null; // Or undefined may be.

然后在定义之后,它就被定义了。然而,当您将代码替换为:时

if (0 == 0) {
    innerFunction();
}
function innerFunction() {
    alert("Hello World");
} // Notice no semi colon.

首先定义整个函数。如果你想使用函数表达式,而不是声明,你需要把定义放在调用的顶部。

现在这就行了。

var initFunction = function(){
    var innerFunction = function(){
        alert("Hello World");
    };
    if (0 == 0) {
        innerFunction();
    }
};

用分号关闭所有函数是否是一种好的做法

对于函数表达式,这是一个很好的练习。对于普通函数声明(使用function关键字而不是匿名函数),这是不必要的。

这和"function initFunction(){}"是一样的,不是吗?(

没有。函数声明已挂起。函数表达式不是。(您有一个函数表达式)。

在将值分配给innerFunction(两行之后)之前,您尝试调用innerFunction();