1.變量聲明提升
js引擎會把變量聲明與函數(shù)聲明都提升到當(dāng)前函數(shù)的頂部。eg:
console.log('x' in window);//true
var x;
x = 0;
js引擎編譯為
var x;
console.log('x' in window);//true
x = 0;
2.函數(shù)表達(dá)式
對于函數(shù)的聲明有
var Foo = function(){}
function Foo(){}
前者為函數(shù)表達(dá)式,后者為函數(shù)聲明
js會把函數(shù)表達(dá)式拆分為兩行分別執(zhí)行杜窄。例如:
var x=1;
function x(){}
執(zhí)行時(shí)為先把函數(shù)表達(dá)式拆分濒持,然后變量變量提升
function x(){}
console.log(x);
x=1