为什么JavaScript会提升变量?
设计师决定实施吊装时的理由是什么? 有没有其他流行语言可以做到这一点?
请提供文档和/或记录的相关链接。
答案 0 :(得分:47)
正如Stoyan Stefanov在“JavaScript Patterns”一书中解释的那样,提升是JavaScript解释器实现的结果。
JS代码解释分两次执行。在第一次传递期间,解释器处理变量和函数声明。
第二遍是实际的代码执行步骤。解释器处理函数表达式和未声明的变量。
因此,我们可以使用“提升”概念来描述这种行为。
答案 1 :(得分:11)
“因此,无功起吊是功能起吊的意外结果,没有块作用域,[和] JS是1995年的紧急工作。”
“函数提升允许自上而下的程序分解,在声明之前调用,可免费使用'let rec';在声明之前进行变量提升。”
我不知道任何其他流行的语言都以相同的方式提升变量。我认为,甚至ActionScript(Flash开发中使用的ECMAScript的另一种实现方式)也没有实现提升。对于熟悉其他正在学习JavaScript的其他语言的开发人员来说,这是一个困惑和沮丧的原因。
答案 2 :(得分:0)
这是因为javascript解释器会在两个周期内解释代码。
在第一个循环中,所有变量和函数声明都将移至其正在执行的函数作用域的顶部。这有助于在执行之前为函数variableObjects
创建execution context
。
在第二阶段,按预期方式逐行进行值分配,代码语句和函数调用。
您已阅读了一些更详细的内容 here.
它将为您更好地了解let
,const
和class
声明周围的行为,以及变量和函数之间的优先级。