没写var的情况下, fn2相当于全局函数,但是可以读取局部变量?

var fn1 = function(){

var a=1
alert(a)
fn2=function(){

console.log(a);

}
}
fn1();
fn2(); 
这样的话全局的fn2,读取用到了局部函数fn1的var a=1?不符合作用域链啊?


UYOU
浏览 332回答 1
1回答

PIPIONE

函数fn2就被包括在函数fn1内部,这时fn1内部的所有局部变量,对fn2都是可见的,但是对于fn2来说是改变不了fn1任何局部变量的值的。同时fn2内部的局部变量,对fn1是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。var fn2; // 此时fn2为undefinedvar fn1 = function () {        var a = 1        // alert(a)        // 重新定义fn2为一个函数,因此可以在外部调用fn2        fn2 = function () {            a = 4;            console.log('fn2',a);            fn1();        }        console.log('fn1',a);    }    fn1();    fn2();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript