JS变量声明提升

JS的变量作用域是离它最近的封闭语块或代码块,包含他们内部的函数.

在代码块中声明会被隐式的提升到封闭函数的顶部

1 function (){
2   var x=0;
3   for(var i=0;i<n;i++){
4     ....
5   }
6   var y=1;
7 }

上面的代码会被JS解释成下面的格式

1 function (){
2   var x=0;
3   var y=1;
4   var i=0;   
5   for(i<n;i++){
6     ....
7   }
8 }    

 有时候我们会不小心的在函数内部重新声明了已有的变量

function text(x){
  ......
 for(var i=0;i<n;i++){
  var x=i; 
  }
}

 

如果我们把变量的声明和赋值看做两部份,就会比较好理解JS (如var x=0;看做var x; x=0;) 根据隐式提升规则

function text(函数传入的值){
    var x;
    var x;
    x=函数传入的值
  ......
 for(var i=0;i<n;i++){
  x=i; 
  }
}

 

特殊情况 JS的异常捕获catch(x){} x的作用域仅在catch语块内

function test(){
var x="var",result=[];
result.push(x);
try{
throw "exception";
}
catch(x){
x="catch";
result.push(x);
}
result.push(x);
return result;
}
test();//["var", "catch", "var"]

 

  

posted @ 2016-08-19 15:36  致匠心  阅读(134)  评论(0编辑  收藏  举报