为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2019-02-12 17:19:44
var fn1 = function(){var a=1alert(a)fn2=function(){console.log(a);}}fn1();fn2(); 这样的话全局的fn2,读取用到了局部函数fn1的var a=1?不符合作用域链啊?
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

函数fn2就被包括在函数fn1内部,这时fn1内部的所有局部变量,对fn2都是可见的,但是对于fn2来说是改变不了fn1任何局部变量的值的。

同时fn2内部的局部变量,对fn1是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。

所以,父对象的所有变量,对子对象都是可见的,反之则不成立。


var fn2; // 此时fn2为undefined


var fn1 = function () {


        var a = 1

        // alert(a)

        // 重新定义fn2为一个函数,因此可以在外部调用fn2

        fn2 = function () {

            a = 4;

            console.log('fn2',a);

            fn1();

        }


        console.log('fn1',a);

    }


    fn1();

    fn2();


查看完整回答
反对 回复 2019-02-28
  • 1 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信