js函数作用域链-预解析-变量提升

133 阅读1分钟

函数里面才有作用域

        var color = "yellow";
        function getColor() {
            var anotherColor = red";

            function swapColor() {
                var tmpColor = color;
                color = anotherColor;
                anotherColor = tmpColor;
            }
            swapColor();
        }

        getColor();
        console.log(color);

运行方式: 首页tempColor = color,没有找到这个变量,往外面的作用域去找,tempColor="yellow",接着color = anotherColor,往外的作用域找变量,得到color= "red",anotherColor ="yellow"

预解析

    console.log(fn2);
    function fn2() {
        console.log('我是函数');
    }
    var fn2 = '我是变量';
    console.log(fn2);

输出结果:变量和函数先提升,输出functio fn2() { },再输出 "我是变量"。

var声明的全局变量

    fn3();
    console.log(num1);
    console.log(num2);
    console.log(num3); 
    function fn3(){
        var num1 = num2 = num3 = 100;
        console.log(num1); 
        console.log(num2); 
        console.log(num3); 
    }

注意:因为num2和num3没有用var声明,所以是全局变量 输出结果:100,100,100,报错,100,100