函数声明是否必须不出现在条件语句中?

mko*_*mko 5 javascript

嗨,我是Javascript的新手,我正在阅读Oreilly的Javascript权威指南.在声明声明部分,它说:

在此输入图像描述

我做了一个简单的测试:

var a = 1;
while(a < 5){
    a++;
    function double(a){return a * 2 };
    console.log(double(a));
}    
Run Code Online (Sandbox Code Playgroud)

似乎node.js没有给我任何错误并按预期运行.对此有何评论?

Nie*_*sol -1

这不是真的。但您应该记住,它们的行为可能与您预期的不同。

例如,这将起作用:

if( false) {
    function double(a) {return a*2;};
}
else {
    console.log(double(4));
}
Run Code Online (Sandbox Code Playgroud)

即使您可能认为该函数由于位于if从未到达的内部而从未定义,但该函数实际上被提升到当前“块”的顶部(无论是包含函数还是整个<script>标记或文件)并且是因此可以在任何地方访问。

不应该function定义放在if块内,但没有理由不能这样做。