六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 22|回复: 0

Javascript基础,变量提升(hosting)

[复制链接]

升级  42.05%

599

主题

599

主题

599

主题

探花

Rank: 6Rank: 6

积分
1841
 楼主| 发表于 2013-1-29 08:54:14 | 显示全部楼层 |阅读模式
http://www.cnblogs.com/TonnyGu/archive/2011/09/29/2195459.html


myname="global";
2 function fun(){
3   alert(myname);    //undefined
4   var myname="local";
5   alert(myname);    //local
6 }
7 fun();
8
9 myname="global";
10 function fun(){
11   alert(myname);    //global
12   //var myname="local";
13   //alert(myname);   
14 }
15 fun();
16
17 var myname="global";
18 function fun(){
19   alert(myname);    //global
20   myname="local";
21   //alert(myname);
22 }
23 fun();
24
25 //原因是JavaScript有变量声明提升(Hoisting)
26 //var表达式和function声明都将会提升到当前作用域的顶部
27 //PS:
28 //函数声明:function functionname (arg0, arg1, arg2) { 函数体 }
29 //函数表达式:var functionname = function (arg0, arg1, arg2) { 函数体 }
30 myname="global";
31 function fun(){
32   alert(myname);    //undefined
33   var myname="local";
34   alert(myname);    //local
35 }
36 fun();
37
38 //这个函数其实为:
39
40 myname="global";
41 function fun(){
42   var myname;       //变量声明.变量声明但未对其初始化时,这个变量为undefined;
43                     //myname被提升到当前函数作用域链的顶部
44   alert(myname);    //undefined
45   myname="local";   //变量初始化
46   alert(myname);    //local
47 }
48 fun();
49
50 //总结最佳实践:Declare All variables at the top
51 function() {  
52   var a, b, c;   //声明
53   a = 'a';         //初始化
54   b = 'b';
55   c = 'c';
56 }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表