关于Javascript中的嵌套函数

时间:2015-07-12 18:36:08

标签: javascript

我正在通过Head First JavaScript来了解嵌套函数。以下是我无法理解的代码。

var migrating = true;
if (migrating) {
    quack(4);
    fly(4);
}

var fly = function(num) {
    var sound = "Flying";
    for (var i = 0; i < num; i++) {
        wingFlapper();
    }
    function wingFlapper() {
       console.log(sound);
    }
};

function quack(num) {
    var sound = "Quack";
    for (var i = 0; i < num; i++) {
        quacker();
    }
    var quacker = function() {
        console.log(sound);
    };
}

书中说&#34; quacker是由函数表达式定义的 功能嘎嘎。所以它的范围是整个 嘎嘎功能,但它只在之后定义 评估函数表达式,直到结束 功能体。&#34; 所以我在评估之前调用了函数,所以它不应该抛出异常,或者我不理解这个概念?

2 个答案:

答案 0 :(得分:0)

这应该是错误的。 quacker()是一个函数表达式,遵循自上而下的方法。如果将该函数表达式更改为函数语句,它应该可以正常工作。我知道这看起来很混乱

Why can I use a function before it's defined in Javascript?

试试这个。它不应该出错,因为我们正在使用函数语句,它会在任何其他东西执行之前绑定到上下文(这里是全局)。

function qaucker() 
{
     console.log(sound);
};

答案 1 :(得分:-1)

没错。这应该。如果您在某些浏览器控制台中尝试该示例,您将看到如下内容:

Uncaught TypeError: quacker is not a function
    at quack (<anonymous>:26:1)
    at <anonymous>:5:1
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)