• Home
  • About
    • Xrlin photo

      Xrlin

      A blog for sharing my thoughts and knowledge

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Javascript声明提前

03 Jun 2016

Reading time ~1 minute

变量声明提前

Javascript在运行代码前会进行预解析,将变量声明和函数声明提前, 如:

var name = 'name';
function test(){ 
 console.log(name); //undefined
 var name = 'name'; // 此时才进行赋值
 cosnole.log(name) // 'name' 
}

test(); //运行后依次输出undefined, name

造成这种现象正式由于javascript解析时将变量声明提前所造成的,javascript预解析时将var name = 'name'; 这条语句分解成为 var name; name = 'name';, 并且将var name;变量声明这部分放到函数内的第一行,于是test函数就变成了:

var name = 'name';
function test(){ 
 var name; //覆盖了函数外的作用域中的name变量
 console.log(name); //undefined, name还没有进行赋值
 name = 'name'; // 此时才进行赋值
 cosnole.log(name) // 'name' ,此时name变量已经进行赋值
}

因此javascript中最好将变量声明在作用域中的顶部,暂时不需用到,需要以后赋值的变量也将其放在顶部,留待以后赋值,从而避免因声明提前所造成的困扰。

函数声明提前

同样,javascript预解析时会将函数声明进行提前,如:

function test(){
 alert(1);
}
test();
function test(){
 alert(2);
}
test();

运行以上代码,会发现与预想中分别弹出内容为1、2的提示框的情况不一样,运行的结果是两个弹出框的内容都为2,这是因为javascript将函数声明提前到代码的顶部,而两个函数同名,后面的函数定义覆盖之前的定义,就造成了弹出2次内容为2的提示框。



Javascript Like Tweet +1