我們來定義一個函數表達式
var s = function(){
console.log("我被執行了");
}
接下來調用
s();
是不是沒問題。那我們換一種姿勢再試一次;
什麼情況?爲啥報錯了。是不是有點疑惑。調用的函數。放到函數表達式前,就報錯了。找不到此函數。
這是因爲函數存在提升問題。函數表達式不存在提升。也就是說。如果定義一個函數而非函數表達式操作以上步驟是沒問題的
我們來試下。
所以如果定義函數表達式。我們一定要放在調用方法之前。因爲函數表達式不存在提升
順便解釋下什麼是提升:
引擎會在解釋JavaScript代碼之前首先進行編譯,編譯過程中的一部分工作就是找到所有的聲明,並用合適的作用域將他們關聯起來,這也正是詞法作用域的核心內容。
還有就是定義函數最好不要放在$(function(){})裏。如果在外部調用函數。肯定會報未定義。因爲在此定義函數。是個局部函數。所以在外部肯定調用不到的