你自认为理解了JavaScript?-6

https://www.cnblogs.com/fengfan/p/3993542.html

function fo(){
    console.log(a); 
}
function foo(){
    var a = 2;
    fo();
}
foo();

先执行 foo 函数, fo 虽然在foo调用,但是 fo函数是声明在全局作用域下的,所以fo中引用的a,是指向全局的window,而全局作用域下的a 并未声明,虽然在 foo 下,声明了var a=2,但它作为局部变量,无法被函数外的作用域所调用。
console.log(a) // a is not defined;

如果将以上代码写成:

复制代码

function foo(){
    var a = 2;
    function fo(){
        console.log(a);
    }
    fo();
}
foo();

复制代码

因为这时候,函数fo是声明在foo函数体内的,属于foo的内部函数,作用域链的访问顺序是由内向外的,a在fo里搜索不到,就会到上一级函数foo中 寻找,这里找到var a = 2 后返回结果。

console.log(a) // 2;

发布了224 篇原创文章 · 获赞 74 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/104077283