JavaScript中变量提升

    技术2023-06-29  85

    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
    Processed: 0.012, SQL: 9