1

“函数定义可能不会出现在 if 语句、while 循环或任何其他语句中”是什么意思。我对这种说法感到很困惑。

4

1 回答 1

0

您在书中阅读的一个问题是,在某些浏览器中,函数定义(与函数赋值不同)本质上被提升到宿主函数的顶部,因此将其放在语句中(就像在if语句中一样)是彻头彻尾的误导。代码将使它看起来只有在语句的分支执行时才会定义函数if,但不一定是这种情况。所以,这是一个不好的做法。它可能在许多情况下都有效,但这是一种不好的做法。

所以,而不是这样:

function main(foo) {
    if (foo) {
        function internal() {
            // code here
        }
        // code here
    }
}

把内部函数放在最上面;

function main(foo) {
    function internal() {
        // code here
    }
    if (foo) {
        // code here
    }
}

仅供参考,在严格模式下,内部函数定义只允许在顶部。条件函数赋值总是可以用这种语法来完成:

var internal;
if (foo) {
    internal = function() {}
}
于 2012-12-17T07:17:27.387 回答