1、變數宣告提前:
看**
(function()
})()
/* 以上**報錯:referenceerror: a is not defined,
* 這很好理解 根本就沒宣告當然報錯啦,往下看:
*/(function()
})()
//以上**對於直譯器來說是下面這樣的,所以沒有報錯,且輸出了undefined;
(function()
})()
//再來看一中情況:
(function()
})()
/* *原因如下:對於直譯器來**是這樣的
*/(function()
})()
2、函式提前:
(function()
})// 以上**中函式add 不只是宣告提前了而是整個add函式的定義都被提前了
//另一種情況:
(function()
})()
//對於編譯器來說**如下:
(function()
})()
**總結:**
1、變數的宣告被提前到作用域頂部,賦值保留在原地
2、函式宣告整個「被提前」
3、函式作為值賦給變數時只有變數「被提前」了,函式沒有「被提前」
變數宣告提前與函式宣告提前
變數的宣告提前 在全域性作用域中,使用var關鍵字宣告的變數會在所有的 執行之前被宣告,但是不會賦值。所以我們可以在變數宣告前使用變數。但是不使用var關鍵字宣告的變數不會被宣告提前。在函式作用域中,也具有該特性,使用var關鍵字宣告的變數會在函式所有的 執行前被宣告,如果沒有使用var關鍵字宣告變...
變數宣告提前 總結 js
js在執行時,js變數宣告語句無論出現在何處,都會先於其他 首先被執行。使用var的宣告的變數會提前。先舉個例子看看 console.log a function a var a 3 var b function console.log a 3function a b console.log a 4...
js 理解變數宣告提前
console.log a 不會出錯,會輸出undefined var a 100 console.log a 100 由於從上往下執行時遇見了var,所以實際執行順序 var a 宣告提前 console.log a undefined a 100 賦值任然留在原位置 console.log a ...