函数变量的作用域

变量作用域

变量只能在局部中使用,因此叫做局部变量
在任何地方都可以使用的变量叫做全局变量
优先局部变量。

局部变量特征

被定义在函数内部的变量,适用范围仅在函数内部,并且当前函数执行完成以后,这个变量会被销毁
下一次这个函数再执行时,会重新定义这个变量,并且变量在函数执行完成后不能被使用。

全局变量与局部变量同时存在的情况

1、外部的全局变量a想和内部的局部变量a相加
a+window.a ES6被禁止

2、如果当前函数内没有定义局部变量,则内部直接调用外部的全局变量
如果打印变量早于定义该局部变量之前,仍然遵循局部变量优先原则

例:var a=10;
        function fn(){
            console.log(a); //undefined
            var a=4;    //这句话的执行相当于定义与赋值是分开的。先定义后赋值。
            console.log(a)  //4  这两个a都是局部变量a
        }
其内部结构其实相当于
function fn(){
    var a;
    console.log(a);
    a=4;
    console.log(a);
}

3、在函数中只要看到使用var定义的变量,这个变量就一定是局部变量,而且这个变量被优先调用。

4、没有使用var,当前变量是全局变量。在内部改变了全局变量,全局变量也会随之改变。

5、当在函数中设置了参数,那么就相当于,这个参数就是被var定义好的局部变量

6、重复定义不赋值,不起作用

例:var a=100;
    function fn(a){
        console.log(a);//6
        var a;//因为参数本身就是局部变量,所以重新定义不赋值不起作用
        console.log(a);//6
        a=10;
        console.log(a);//10
    }
    fn(6);

例:var a;
    function a(a){
        console.log(a);//6
        var a;
        console.log(a);//6
        a=10;
        console.log(a);//10
    }

    a(6);//可以执行,因为虽然是先定义了a函数,后重定义了a,但是重定义a并未赋值,所以不起作用,所以依然可以执行。如果是var=1; 赋值后便改变了a,执行函数a时会报错。

例:var a={
    a:function(a){
        var a
        console.log(a);
        }
    }
    a.a(5);//相当于执行了a对象的a属性方法,并将5当做参数传入到函数中。

7、不同函数里的局部变量之间的传递

    function fn1(f){
        var x=20;
        f(x)
      }
      function fn2(x){
        console.log(x);
      }
      fn1(fn2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值