预解析和作用域(一)

作用域

  • 作用:获取函数或变量
  • 域:全局作用域、局部作用域

全局变量和局部变量

  • **全局变量:**直接在script下声明的变量,任何地方都可以访问,任何地方都能对其值进行改变

  • **局部变量:**函数内部定义的变量,函数可以访问,出了函数的花括号{}就不能被访问

  • 局部变量可以访问修改全局变量

  • 全局变量:任何地方都可以被访问和修改
    -----------------------------------
    <script>
    	var a=10;
        function fun1(){
            a++;
            console.log(a);//11
        }
        function fun2(){
            a++;//12
            a--;//11
            console.log(a);//11
        }
        fun1();
        fun2();
        a=30;
        console.log(a);//30
    </script>
    ---------------------------------------------
    局部变量或函数:只可以在函数内部访问
    --------------------------------------
    fun3();
    function fun3(){
    	var a=10;
    	console.log(a);//10
    	function s(){
    		console.log('A'+a);
    	}
    	s();
    }
    console.log(a);//a
    s();//报错  s is not defined 
    

    预解析

  • 步骤

    1. 全局找var和function
      • 变量名没有冲突,var–>undefined,function–>本身
      • 变量名有冲突,选function,不管函数是否调用
    2. 有函数调用
      • 没有参数,就和var、function一样
      • 有参数
        • 参数名、变量名和函数名没有冲突,就和没参数做法一样
        • 参数名和变量名冲突,选参数名
        • 参数名和函数名冲突,选函数名
    3. 逐步执行

作用域链

  • 类似绝对定位
  • 从当前作用域开始往外找,直到找到全局作用域

写一些例题吧:

  1. <script>
    	alert(a);  //function中的内容,一进来找var和function,然后俩名字一样,所以选择function
        var a=1;
        alert(a); // 依次往下开始执行 1,当把1赋给a的时候,就已经决定a是number类型的了
        var a=2function a(){
            alert(4);
        }
        alert(a);//2
        alert(typeof a);//number
        a();//报错,a is not a function
    </script>
    
  2. var a=1;
    function b(){
    	alert(a);//undefined,有函数先解析函数
    	var a=2;//这是一个局部变量,只是名字正好和外面的变量名字一样了
    	alert(a);//2
    }
    b();
    alert(a);//1
    
  3. var a=3;
    function fun(a) {
     /*有形参而无实参的时候,
      就相当于给函数加了一个局部变量,
      只是这个局部变量正好和全局变量的变量命一样了,
      改变的是局部变量而不是全局变量*/
      // var a;
      alert(a);//undefined
      a = 2;  // a  形参 
      alert(a);//2
    }
    fun();
    alert(ab);//3
    
  4. 还有一些例题尚未整理,以后有机会再整

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值