js中的变量提升

2021-05-30 06:00

阅读:751

标签:code   问题   const   函数声明   访问   使用   纠正   html   标题   

一、前言

只能说,js所谓的变量提升,是设计缺陷,让很多新老手迷惑。好在ES6出了let和const,杜绝了大部分的变量提升问题,下面引述一位博友的话,他说的 “标识符提升”确实更为妥当。

首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许变量不声明就可以访问,或声明在后使用在前。新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑。但在 ES6 加入 let/const 后,变量Hoisting 就不存在了。

二、简述

变量提升优先级:函数声明>var形式的函数声明=var声明

2.1 var声明

var声明提升:

function test(){
         console.log(a);
         var a=22;
     }

     test();  //输出undefined

上述代码等同于:

     function test(){
         var a; //只是先被声明而已
         console.log(a);
         a=22; //负值
     }

    test();  //输出undefined

2.2函数声明

     function test(){
         console.log(a());
         function a(){
             return 2;
         }
     }
     test();                // 控制台输出:2

等同于:

function test(){
        function a(){       //刚才声明的函数会被提升
             return 2;
         }
         console.log(a()); 
     }
     test();                // 控制台输出:2

js中的变量提升

标签:code   问题   const   函数声明   访问   使用   纠正   html   标题   

原文地址:https://www.cnblogs.com/panshaojun/p/14690964.html


评论


亲,登录后才可以留言!