JavaScript中变量提升

JavaScript中变量提升详解

ES6之前我们一般使用var来声明变量,提升简单来说就是把我们所写的类似于var a = 1这样,声明提升到它所在作用域的顶端去执行,到我们代码所在的位置来赋值。

如下:这种情况下输出undefined,变量提升 相当于 var a; (变量定义)提升 , 赋值停留在原地

   		console.log(a);  
         var a = 1; 
        //undefined  变量定义了 但是没有给变量赋值
        // 变量提升 相当于  var a; (变量定义)提升 , 赋值停留在原地

        // var a;
        // console.log(a);  
        // a = 1;

多个script标签的情况下:变量提升不能跨标签

  <script>
        // console.log(a);/  报错  
    </script>
    <script>
        //  var a = 1;
    </script>
//变量提升不能跨标签

其他情况:

1.在if语句里面:

<script>
	 console.log(a);
        // a = 1;
        // 在if语句里面

        // console.log(a); // 未定义 1  报错 2 
        // if(false){
        //    var a =1; 
        // }
        // 写在if语句里面 也是存在变量提升 
        // 虽然if没有执行 ture里面的内容 但是也存在变量的提升
     //在js里面 var 存在变量声明提升  如果先使用变量 只会知道 它已经存在 但是如果是在
        //    使用之后赋值  我们只能输出未定义
</script>

2函数

<script>
	 // myFuncA(); // 1   2
        // function myFuncA() { //函数具有预编译能力 
        //   alert("哈哈A");
        // }

        console.log(a);
        var a = 10;
        console.log(a);
        function a(){
           console.log("我是A");
        }
        console.log(a);
		输出:undefined 10 10.
        //函数会优先变量  先提升

        // function a(){
        //    console.log("我是A");
        // }
        // var a;
</Script>

3

<script>
	console.log(a);  
        a = 1; //报错
    这里要区分和我们第一种的情况
    第一种定义了var a=1;
    而这里只是a=1;
    我们说过 第一种情况相当于  var a; (变量定义)提升 , 赋值停留在原地
    而这里没有定义则是报错
</script>

4

		console.log(b);
        b();
        
        var b = function(){
            console.log(1);
        }
        // b 是一个变量  只是把一个匿名函数赋值给了变量 b

猜你喜欢

转载自blog.csdn.net/weixin_44691513/article/details/107105021