gpt4 book ai didi

javascript - 为什么在 if 中定义函数是个坏主意?

转载 作者:行者123 更新时间:2023-11-29 19:26:24 25 4
gpt4 key购买 nike

来自 Marijn Haverbeke 的 Eloquent Javascript

Different JavaScript platforms in different browsers have traditionally done different things in that situation, and the latest standard actually forbids it.

但为什么不好呢?

function example () {
function a () {} // Okay
if ( something ) {
function b () {} // Danger !
}
}

最佳答案

它被认为是“坏的”,因为它的行为不一致,有时并不像大多数人所期望的那样。考虑以下代码段:

if (true) {
function f() { return "t"; }
} else {
function f() { return "f"; }
}

调用 f() 会返回什么?在 IE 和 Firefox 上,它将返回 "t",但在 Chrome 和 Safari 上,它将返回 "f"。为什么?提升和 JavaScript 范围规则的组合。有关其工作原理的信息,请参阅 this question on JavaScript scoping and hoisting .

实际上,这意味着在某些浏览器上,当涉及到使用 function name() { ... } 形式的函数定义时,分支会被完全忽略。如果你真的需要做这样的事情(你可能不需要,因为它无论如何都是非常糟糕的风格),请改用 name = function () { ... } 形式,因为它不会被提升,所以行为是明确定义的并且不会跨平台不一致。

关于javascript - 为什么在 if 中定义函数是个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com