js笔记

Posted on 2020-10-18 17:31  每天都在想着退休日子  阅读(75)  评论(0)    收藏  举报

变量提升

 console.log(a);
    var a = 2;  //把此行注释掉会报错,不注释就显示undefined
    //变量提升:在代码执行之前变量已经被声明了

js代码的运行阶段:    

1.解析(编译)阶段:语法检查,变量及函数进行申明
2.运行阶段:变量的赋值,代码流程的执行
所以上面那个代码其实是这样的:
var a;
    console.log();
    a = 2;  //此情况称之为变量提升

全局变量与局部变量

function f1(){
        var a = 2;
    }

    var f2 = function(){
        var a = 1;
    }
    console.log(a); //undefined
    var a = 2;
    f2();

作用域和代码执行

如果函数名和变量名重名时,函数声明会替换掉变量声明

 

 

作用域链

 var a = 3;
    function f1(){
        var a = 6;
        function f2(){
            var a = 5;
            function f3(){
                var a = 4;
                //当函数中使用某个变量时,优先在自己的作用域中查找
                //如果查找不到,就会向上一层作用域查找\
                //如果找不到就继续往上一层查找,直到全局作用域,
                //如果还是找不到就直接报错,这就是作用域链
                console.log(a);
            }
            f3();
        }
        f2();
    }
    f1();