JavaScript--声明提前

Posted 笑嘻嘻的小银

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript--声明提前相关的知识,希望对你有一定的参考价值。

声明提前(hoist): 在正式执行程序前,都会将所有var声明的变量和function声明的函数提前到*当前作用域*的顶部集中创建。
但是,赋值留在原地。

    console.log(a);//undefined
    var a=10;
    console.log(a);//10

同理,下面也是一个例子:

因为函数的声明提前,同时第二个fun()覆盖了第一个fun(),所以第一个fun()会弹出2,第二个同理也是弹出2,第三个console.log则会输出var定义的100,最后一个fun()

 1   fun();//2
 2   function fun(){
 3     alert(1);
 4   }
 5   fun();//2
 6   function fun(){
 7     alert(2);
 8   }
 9   var fun=100;
10   console.log(fun);//100
11   fun();//Uncaught TypeError: fun is not a function

再来一个例子:

因为函数内声明的变量a提前到函数作用域的顶端,但是值留在了原地,所以第一次console.log输出的是undefined,第二次输出100,同时函数执行完后被垃圾回收,最后一次console.log输出全部变量的值10。

1  var a=10;
2   function fun(){
3     console.log(a);//undefined
4     var a=100;
5     console.log(a);
6   }
7   fun();//100
8   console.log(a);//10

 

以上是关于JavaScript--声明提前的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之预解析

JavaScript--声明提前

JavaScript 变量声明提前

Javascript函数

js(javascript)小谈变量声明(显隐声明,声明提前)

JavaScript 变量作用域 详解