js作用域和预编译

本文介绍了JavaScript的全局和局部作用域概念,强调了函数作用域与块级作用域的区别。此外,深入探讨了执行环境,包括全局执行环境和局部执行环境,以及预编译阶段的过程。最后,解读了作用域链的工作原理和实例应用。
摘要由CSDN通过智能技术生成

作用域:
全局作用域:最外层定义的变量
局部作用域:只在固定的代码片段内可用,函数外出不可访问
js没有块级作用域,局部作用域数有函数的产生而产生的;也叫函数作用域

注意:建议使用var声明变量,如果没有var声明,那么在函数内也是声明了全局变量。

块级作用域:{}

function test() {
            a = 10;
            console.log(a);
        }
        test();
        console.log(a);

js执行环境
全局执行环境:最外面层的执行环境---->window
因此所有的全局变量和函数都作为window的属性和方法。Go

局部执行环境:函数内的执行环境----->Ao

js三部曲
1.语法检查
2.预编译
3.逐行解释执行

预编译:
发生的时刻:函数执行的前一刻和全局下
过程:
1.创建AO对象(active , object, this, argument)
2.在函数内找用var定义的变量级形参变量,并赋值为undefined
3.形参和实参先统一
4.找函数内用function定义的函数,并将函数体赋值。

// 例题;
        function test(a) {
            console.log(a); //function
            var aa = 345;
            console.log(aa);  //345
            var a = 6;
            console.log(a);  //6
            function a() {
                console.log(a);  //6
                var cc = 456;
                console.log(cc);  //456
            }
            a();
        }
        test(4);
        // AO{
        //     this:window
        //     arguments:[4];
        //     aa:345
        //     a:6
        // }
        // Go{
        //     test:function
        // }

作用域链:
当一个函数被调用的时候,创建了执行环境和相应的作用域链,并且把作用域链赋值给一个特殊的内部属性[[scope]],然后用this,arguments(全局不存在),和其他的命名参数来初始化活动对像,当前的执行环境始终在作用域链的最顶端
[[scope]]中所存储的执行期上下文的集合,这个集合呈链式结构,我们把这种链式叫做作用域链。也是作用域对像的集合。

var a = 10;
        function test(c,d) {
            var b = 20;
            function aa() {

            }
            aa();
        }
        test(4);
        // aa-AO{
        //     this:window
        //     arguments
        // }
        // test-AO{
        //     this:window
        //     arguments:[4]
        //     b:20
        //     c:4
        //     d:undefined
        //     aa:function
        // }
        // GO{
        //     a:10
        //     test:function
        // }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值