Js--作用域链的问题(全局+函数两种作用域)

93 阅读1分钟
        let a = 3; //a=10
        function func(a) {
            a = 10;
            console.log(a);
        }
        func(a); 
        console.log(a)

        //10
        //3

       解析:1、注意函数作用域,内部有个变量a = 10
            2、外部a没有更改过
            
        let obj = { a: 1 };
        function set(obj) {
            obj.a = 2;
            obj = { a: 2, c: 3 };
        }
        set(obj);
        console.log(obj);

        //{a:2}
        
        解析:1、函数作用域中:变量obj指向外部obj{a:1},更改它为{a:2},然后变量obj指向了另一个对象
             2、打印时,外部obj指向不变{a:2}    注意指向(即引用)问题


        
        function bar() {
            console.log(project);
        }
        function foo() {
            var project = 'foo';
            bar();
        }
        var project = 'global';
        foo();

        //global
        //谁来调用我,我就代表谁,没人调用我,我就是window
        
        解析:bar()调用时,前面没有对象,故而指向window