码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript--声明提前

时间:2016-05-22 19:47:25      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

声明提前(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--声明提前

标签:

原文地址:http://www.cnblogs.com/chenzeyongjsj/p/5517333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!