<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <script> //预解析,变量声明提升 if(! 'a' in window){ var a=123; } alert(a);//undefined /*说明: * 1.变量声明提升,var a; * 2.变量a是window对象的一个成员,if的条件为假,所以赋值语句没有执行。 * 3.最后打印的a为undefined,因为a声明了蛤没有赋值。 * / //函数声明提升,函数虽然写在后面,但声明会提升 foo();//1 function foo () { alert(1); } // if语句中的函数 if(true){ function f1 () { console.log('true'); } }else{ function f1 () { console.log('false'); } } f1();//true // 说明:在新版本的浏览器中,写在逻辑判断语句块中的函数会当作表达式来处理,不会当作函数声明,所以也不存在函数提升的问题。 </script> </html>