JavaScript的作用域

本文深入解析JavaScript中的作用域概念,特别是函数作用域,以及词法分析如何影响变量的解析过程。通过实例说明作用域链的创建与变量查找机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  JavaScript的作用域主要是指函数的作用域,在进行结果判断的时候十分重要,如果不清楚作用域,便很有可能导致拿不到预期的结果,也就无法顺利的进行程序的编写,在经历了一系列的学习和了解之后,对相关知识进行一个汇总,认识比较浅显,希望可以帮助到有需要的人。

  首先引入一个概念:词法分析

  JavaScript在创建的时候会对function进行词法分析,函数会在创建时形成一个活动对象,ActiveObject,简称AO,先举一个实际的例子进行分析:

  

    function t1(age) {
        console.log(age);
        var age = 24;
        console.log(age);
        function age() {}
        console.log(age);
    }
    t1(1);

 

  词法分析步骤为:

  1. 分析形式参数,此例为age,即生成一个AO.age=undefined的活动对象==>然后根据进行赋值AO.age=1。
  2. 分析局部变量:在第三行有一个局部变量,跟age重名,此时会生成一个AO.age=undefined的活动对象,AO.age=1会被覆盖。
  3. 分析函数声明表达式:此时声明了一个age的函数。所以此时的活动变量为:AO.age=function。优先级最高。

  词法分析结束后函数开始执行,此时的AO.age=function,函数执行时会首先从AO中获取值,所以会首先将function赋给age,所以整个函数的输出为:

      function

      24

      24

  可以根据此方法对JS的作用域进行辅助理解:

    1 JS默认以函数为作用域

    2 函数的作用域在没有被执行之前就已经创建

    3 函数的作用域存在作用域链(作用域嵌套),并且也是在被执行之前创建完毕

        function func(){
	    var xo='eric';     词法分析的时候为AO.xo=undefined
	    function inner(){  词法分析的时候为AO.inner=function
		console.log(xo);   AO.xo=undefined--因为function中还有一个xo的定义,在函数内的返回值为 AO.xo=undefined
		var xo='tony'   
        }
        return inner;
        }
        var ret = func();
     ret();

     该程序执行的结果为:undefined

    4 JavaScript函数内部变量 必须要提前声明

        function func(){
            console.log(xxoo);
            xxoo=tony;//有这一句程序输出为undefined,如果没有这一句会报错
        }
        ret=func();

 

    

 

转载于:https://www.cnblogs.com/BigJ/p/7506676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值