为什么在js当中没有var就是全局变量

因为,在js中,如果某个变量没有var声明,会自动移到上一层作用域中去找这个变量的声明语句,如果找到,就是用,如果没找到,

就继续向上寻找,一直查找到全局作用域为止,如果全局中仍然没有这个变量的声明语句,那么自动在全局作用域进行声明,这个就

是js中的作用域链,也叫变量提升

 

代码示例如下:

var data = 10;
function fn1() {
    var data = 100;
    alert(data);//此时的data为100
    fn2();
    alert(data);   //此时的data为10000
    function fn2() {
        data = 1000;
        fn3();
        function fn3() {
            data = 10000;
        }
    }
}
fn1();
console.log(data); //此时的data为10

 


由此可知,上面代码中,fn1函数里面由于data用关键字var来声明了,所以这里面的data职能找到函数里面的最顶层的var data进行赋值替换,而不会影响到外面用var 来声明的data
posted @ 2017-03-01 20:05  明明一颗大白菜  阅读(2209)  评论(1编辑  收藏  举报
<-- -->