我正在通过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; 所以我在评估之前调用了函数,所以它不应该抛出异常,或者我不理解这个概念?
答案 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)