js-变量提升

 

一:Js解析机制

遇到 script 标签的话 js 就进行预解析,将变量 var 和 function 声明提升,但不会执行 function,然后就进入上下文执行,上下文执行还是执行预解析同样操作,直到没有 var 和 function,就开始执行上下文

二:

 函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

三:函数声明提升

a=5;

show();

var a;

function show(){};

预解析:

function show(){}; // 函数的声明

var a; // 变量的声明

a=5;

show();

注意:需要注意都是函数声明提升直接把整个函数提到执行环境的最顶端

 

除了以上的函数声明方式外,还可以使用匿名函数的方式。使用匿名函数的方式不存在函数提升因为函数名称使用变量表示的,只存在变量提升

var getName=function(){

  console.log(2);

}

function getName(){

  console.log(1);

}

 

getName();// 2

预解析:

//函数、变量声明提升后

function getName(){    //函数声明提升到顶部

  console.log(1);

}

var getName;    //变量声明提升

getName = function(){    //变量赋值依然保留在原来的位置

  console.log(2);

}

getName();    // 最终输出:2

四:变量提升:


    x=5;
    elem=document.getElementById("demo");
    elem.innerHTML=x; // 使用后声明
    var x;

//    预解析
    var x;
    x=5;
    elem=document.getElementById("demo");
    elem.innerHTML=x;
----------------------------------------------------------------------------
    var a=7;
    console.log("++++++++++a",a)
    console.log("++++++++++b",b) // undefined;因为只是 变量声明提升,初始化没有提升
    var b=7;

//    预解析

    var a=7;
    var b;
    console.log("++++++++++a",a)
    console.log("++++++++++b",b) // undefined(声明无初始化);因为只是 变量声明提升,初始化没有提升
    b=7;

 

猜你喜欢

转载自blog.csdn.net/qq_38643776/article/details/84675842