ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### **js变量声明提升** ~~~ var a='hello world'; var a; console.log(a); // hello world ~~~ 上面代码输出的是hello world 而不是undefined。 ~~~ console.log(a); var a='hello world'; ~~~ 借鉴与上面的例子会认为会输出一个hello world,或者是抛出一个没有声明的异常错误,然而发现这两种想法也是错误。输出的结果是‘undefined’。这书非常人性化的总结出了结论是: 引擎解释javascript代码的之前会对其进行编译。在编译过程中会查找所有声明,并用合适作用域将他们关联起来。换句话说,在代码执行之前,会对作用域链中所有变量和函数声明先处理完先。所以,当遇到var a='hello world'中是 var a是先在编译阶段执行,然后在执行a='hello world'。所以,第一段代码实质上是: ~~~ var a; a='hello world'; console.log(a); ~~~ 所以输出的就就是helloworld。总结一句话就是:只有声明被提升,而赋值或其他运算会留在原地。所以第二段代码实际上就是: ~~~ var a; console.log(a); a='hello world'; ~~~