Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';“的意思是什么;函数定义不能出现在语句中;_Javascript - Fatal编程技术网

Javascript 什么';“的意思是什么;函数定义不能出现在语句中;

Javascript 什么';“的意思是什么;函数定义不能出现在语句中;,javascript,Javascript,“函数定义可能不会出现在if语句、while循环或任何其他语句中”的含义是什么?我对这条语句感到非常困惑。你在书中读到的一个问题是函数定义(与函数赋值不同)在某些浏览器中,它本质上被提升到主机函数的顶部,因此将其放在语句中(比如在if语句中)是完全误导的。代码将使其看起来像只有在执行if语句的分支时才定义函数,但不一定如此。所以,这是一个坏习惯。它可能在许多情况下都有效,但这是一种不好的做法 因此,不是这样: function main(foo) { if (foo) {

“函数定义可能不会出现在if语句、while循环或任何其他语句中”的含义是什么?我对这条语句感到非常困惑。

你在书中读到的一个问题是函数定义(与函数赋值不同)在某些浏览器中,它本质上被提升到主机函数的顶部,因此将其放在语句中(比如在
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() {}
}

向我们展示令人不快的代码,并告诉我们是什么产生了这条消息。这条消息到底来自哪里?搜索这一短语会找到弗拉纳根的书,第91页。然而,我只是在nodejs和firefox中进行了尝试,并且我将函数放入“if”语句中没有问题,即使在条件中也是如此。这似乎是您可能想要避免的事情,但显然它们可能会出现,至少在某些javascript引擎中是如此。然而,现代浏览器确实允许这样做。不幸的是,现代浏览器处理这种情况的方式并不一致。ES6将允许在代码块内声明函数,以便指定所有浏览器都必须遵循的标准化行为。总之,该语句将在一两年内过时,但将函数声明放在代码块中仍然被认为是不好的做法。