JS函数声明提前(2)

 var t = 10;
        function test(test){
            var t = ++test;//t text=11
            console.log(t);//11
        }
        test(t);
        console.log(t);//10
        /*
        *函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
        *数都会放到作用域的开始处
        *1 function test(t){}会提前声明;
        *2 var t=10;
        *3 test(t); 执行函数 test(10);
        *4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var text=10;
        *5 var t = ++test; t=11
        *6 函数体内 console.log(t) t=11;
        *7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=10; 则全局变量t=10
         */
      
        var t = 10;
        function test(test){
            t = t + test;
            console.log(t);//20
        }
        test(t);
        console.log(t);//20

        /*
        *函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
        *数都会放到作用域的开始处
        *1 function test(t){}会提前声明;
        *2 var t=10;
        *3 test(t); 执行函数 test(10);
        *4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var test=10;
        *5 t = t+test; 此时test=10 t在自己本函数作用域寻找,没找到向上一层寻找,找到全局
        *               变量 var t=10; 然后t=t+test=20;此时改变的是全局变量的值 var=20;
        *6 函数体内 console.log(t) t=20;
        *7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=20(第五步改变的值);
        *                           则全局变量t=20
        */

    
        var t = 10;
        function test(test){
            t = t + test;
            console.log(t);//undefined+10=NaN
            var t = 3;
        }
        test(t);
        console.log(t);//10
        /*
        *函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
        *数都会放到作用域的开始处
        *1 function test(t){}会提前声明;
        *2 var t=10;
        *3 test(t); 执行函数 test(10);
        *4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var test=10;
        *5 t = t+test; 此时test=10 此时t会在本身函数作用域内寻找,由于var t=3;声明会提前到
        *               函数体内的最前面,则var t;声明但没有赋值  t找到的时候,发现t 声明
        *               但没有赋值 所以t为undefine 则t=undefine+10=NaN    
        *6 函数体内 console.log(t) t=undefined;
        *7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=10;
        *                           则全局变量t=10
        */
        
        
         function f(){
         alert(1);
        }
        f();
        function f(){
         alert(10);
        }
        f();
         /*
        *函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
        *数都会放到作用域的开始处
        *1 第一个function f(){}会提前声明;第二个function f(){}也会提前声明
        *   但是发现两个函数名相同,则发生覆盖,只保留了第二个function f(){}
        *2 f();则alert(10)被打印
        
        */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值