Top

JavaScript基础回顾

一、函数的作用域和声明提升

 A.函数的作用域

 1 //函数的作用域
 2 var color = "blue";
 3 function changeColor(){
 4     var anotherColor = "red";
 5     function swapColors(){
 6          var tempColor = anotherColor; //red
 7          anotherColor = color; //blue
 8          color = tempColor; //red
 9          // 这里面可以访问到 color, anotherColor, tempColor
10     }
11     // 这里只能访问到 anotherColor、全局变量color,不能访问tempColor
12     swapColors();
13 }
14 // 这里只能访问到color
15 changeColor();

 

B.声明的提升

Javascript-block-scop<块级作用域>针对于function-scop
使用if语句的块级作用域声明的变量在外部是可以访问的

 1 function test(obj){
 2     var i = obj;                        //i在整个函数体内均是有定义的
 3     if (typeof obj == 'object') {       //块级作用域
 4         var j = obj;                    //i在函数体内是有定义的,不仅仅在这个代码段内   
 5         for (var k = 0; k < 10; k++) {  
 6             console.info(k);            //输出数字0-9
 7         };
 8         console.info(k);                //k已经定义了输出10
 9     };
10 
11     console.info(j);                    //j已经定义了但可能没有初始化
12 }
13 test({name : 'object'});

函数体内声明的变量j被提升至函数的顶部,变量的赋值是在执行的时候完成的

var scop = 'global';
function fn(){
    console.info(scop);  
    var scop = 'local scop'; //内部的声明变量提升到函数的顶部
}
//猜想结果 local scope
//实际结果 undefined
    
//等价于===>>
var scop = 'global';
function fn(){
    var scop;  //声明一个变量
    console.info(scop);  //变量存在, 变量默认值为undefined 
    scop = 'local scop'; //赋值
    console.info(scop);  //local scop
}

参考资料 

JavaScript 高级程序设计

JavaScript 权威指南 

http://www.cnblogs.com/jesse2013/p/the-essence-of-javascript-you-have-to-know-part2.html

posted @ 2016-05-22 13:36  Avenstar  阅读(160)  评论(0)    收藏  举报