变量声明与函数声明提前简单分析

匿名 (未验证) 提交于 2019-12-03 00:27:02

文中部分demo源自网上。

//demo1 function test(){     var num = 123;     console.log(num);    //123 } test(); console.log(num);    //error  //demo2 var str= “我是Global”;  test();  function test() {      console.log(str);     //undefined     var str= "哈哈哈”;      console.log(str);     //“哈哈哈" }  console.log(str);     //“我是Global”  //demo3 function test(){         if("a" in window){             var a = 10;    //提升到函数作用域最前  if语句没有作用域         }         console.log(a);     //undefined     } test();  //demo4 if("a" in window){         var a = 10;    //if没有作用域,if提升到最前面,window中有a     }     console.log(a);    //10  //demo5 if(!"a" in window){         var a = 10;    //变量提升,没有进入判断语句     }     console.log(a);    //undefined  //demo6 var foo = 1;  function bar() {      if(!foo) {          var foo = 10;      }      console.log(foo);     //10  }  bar();     //申明foo -> 申明bar -> 赋值foo=1 -> 调用bar() -> 申明foo(函数体内) -> 赋值foo(函数体内)  //demo7 var foo; function bar() {     var foo;     if(!foo){          foo = 10;      }      console.log(foo); //10 } foo = 1;  bar();  //demo8   1. function bar() {    2.     return foo;      //return 在foo赋值之前,若在foo赋值之后,则被重写为number类型 3.     foo = 10;    4. function foo() {}   5.   var foo = 11;    6. }   7. alert(typeof bar());//function  //demo9 var a=100; function a(){   console.log(a); } a();    //a is not function           变量和函数重名时,函数优先级更高 a后赋值为100重写了a  //demo10 形参与变量申明重名 function ab(x){      console.log(x);     var x = 4;     console.log(x);  };  ab(3);    // 3 4        在函数中申明的变量被赋值后,顶替原来的形参,若申明没赋值,则值还是形参的值   //demo11函数中申明的函数与形参重名 function ab(x){    console.log(x);    function x(){     console.log("我是函数")   };    console.log(x);  };  ab(3);  //function x(){console.log(“我是函数”)}  function x(){console.log(“我是函数")}

若文中有不对之处,敬请指出。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!