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