javascript Uncaught TypeError: s is not a function。調用函數未定義問題。看完這篇你就懂了

我們來定義一個函數表達式

var s = function(){
  console.log("我被執行了");
}

接下來調用

s();

是不是沒問題。那我們換一種姿勢再試一次;

什麼情況?爲啥報錯了。是不是有點疑惑。調用的函數。放到函數表達式前,就報錯了。找不到此函數。

這是因爲函數存在提升問題。函數表達式不存在提升。也就是說。如果定義一個函數而非函數表達式操作以上步驟是沒問題的

我們來試下。

 

所以如果定義函數表達式。我們一定要放在調用方法之前。因爲函數表達式不存在提升

順便解釋下什麼是提升:

引擎會在解釋JavaScript代碼之前首先進行編譯,編譯過程中的一部分工作就是找到所有的聲明,並用合適的作用域將他們關聯起來,這也正是詞法作用域的核心內容。

還有就是定義函數最好不要放在$(function(){})裏。如果在外部調用函數。肯定會報未定義。因爲在此定義函數。是個局部函數。所以在外部肯定調用不到的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章