js作用域

js变量作用域建立在前面所讲的js解析与执行,变量作用域分为全局和函数,函数里的变量在函数外是无法访问的。

        function  a(){
            console.log(x);
        }
        function b(){
            var x = 5;
            a();//报错
        }
        b();
        //这段代码执行结果是x未定义。因为如前面js解析与执行中说的,函数调用时产生一个词法环境,而a中并没有x,并且它的上一级中也没有x所以这里显示x未定义。

上述只是简单的作用域。下面介绍下函数作用域链

var t = 0;
        //t属于window

        (function f(){
            var a = 1;//属于f
            function g(){
                var b = 2;//属于g
                function e(){
                    var c = 3;//属于e
                    console.log(a);
                    console.log(b);
                    console.log(c);
                    console.log(t);
                    console.log(d);//报错
                }
                window.h = e;
            }
            g();
        })();
        h();

        /*
         f为自调用立即执行函数,通过执行g()将e绑定到window.h上执行e
         首先调用e时,它会创建一个词法环境,添加自己的变量等,在执行时,遇到a,本身词法环境中没有,会向他的父函数的词法环境中找,依次类推直到window对象,也就是全局词法环境,如果没找到到出现未定义错误。这就是作用域链,
         * */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值