摘要:問題碰到了一個很詭異的問題,函數明明定義了,卻報錯說函數沒定義,代碼如下報錯信息測試環境解決后來經過提問和查找資料大概明白了其中的緣由,故寫此文。但自調用函數求值過程中遇到時,還沒有值,所以會報的錯誤。此時,真相大白。感悟不要省略分號感謝
問題
碰到了一個很詭異的問題,函數明明定義了,卻報錯說函數沒定義,代碼如下:
jsvar x = 0;
var foo = function(callback){
return window.setTimeout(callback, 17);
}
(function sayX(){
x += 1;
console.log(x);
foo(sayX);
}())
報錯信息: Uncaught TypeError: foo is not a function
測試環境: chrome 44.0.2403.130 m
后來經過提問,和查找資料, 大概明白了其中的緣由,故寫此文。
這個問題涉及到一個"自動分號插入",具體到這個問題,就是:
1. 函數聲明會自動插入引號;
2. 函數表達式不會自動插入分號;
function foo() { } // 函數聲明會自動添加分號,不需要添加分號 var foo = function() { }; // 函數表達式不會自動添加分數,最好添加分號
具體到這個問題,由于foo 函數表達式后面沒有分號,于是代碼等價于:
jsvar x = 0;
var foo = function(callback){
return window.setTimeout(callback, 17);
}(function sayX(){
x += 1;
console.log(x);
foo(sayX);
}())
插播一條知識點:
函數表達式后面跟括號就會對觸發函數執行,比如var foo = function(x){ return x; }(10)最終 foo 的值是 10 ,而不是函數
回到這個問題, 自調用函數會首先取值, 然后傳入函數求值,返回給foo。
但自調用函數求值過程中遇到 foo(sayX)時,foo還沒有值,所以會報Uncaught TypeError: foo is not a function的錯誤。
此時,真相大白。
感悟不要省略分號.
感謝http://segmentfault.com/q/1010000003074238
http://justjavac.iteye.com/blog/1852405
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85882.html
摘要:函數聲明應該在作用域的頂層。數組和對象字面量用數組和對象字面量來代替數組和對象構造器。數組構造器很容易讓人在它的參數上犯錯。推薦對象構造器不會有類似的問題,但是為了可讀性和統一性,我們應該使用對象字面量。 javascript 代碼規范 代碼規范我們應該遵循古老的原則:能做并不意味著應該做。 全局命名空間污染 總是將代碼包裹在一個立即的函數表達式里面,形成一個獨立的模塊。 不推薦 va...
摘要:函數聲明應該在作用域的頂層。數組和對象字面量用數組和對象字面量來代替數組和對象構造器。數組構造器很容易讓人在它的參數上犯錯。推薦對象構造器不會有類似的問題,但是為了可讀性和統一性,我們應該使用對象字面量。 Coding Standards 轉載自掘金 作者:Sivan 簡介:前端開發的老新人,原生JavaScript的愛好者,致力做一名專業的開發者 javascript 代碼規范 ...
摘要:花點時間搞清楚中的分號規則吧不管你喜歡結尾帶分號或省略分號的模式分號允許的場景分號一般允許出現在大部分語句的末尾,比如等栗子僅有一個分號可以表示空語句在中合法,比如可解析為三個空語句空語句可用于輔助產生語法合法的解析結果,如如果沒有末尾的 花點時間搞清楚JS中的分號規則吧~~~不管你喜歡結尾帶分號或省略分號的模式 分號允許的場景 分號一般允許出現在大部分語句(statement)的末尾...
摘要:如果你想了解更多關于強制類型轉換的信息,你可以讀一讀的這篇文章。在只使用的情況下,所帶來的強制類型轉換使得判斷結果跟蹤變得復雜,下面的例子可以看出這樣的結果有多怪了明智地使用真假判斷當我們在一個條件語句中使用變量或表達式時,會做真假判斷。 說明 如果本文檔中有任何錯誤的、不符合行規的,敬請斧正。 引言 不管有多少人共同參與同一項目,一定要確保每一行代碼都像是同一個人編寫的。...
摘要:我將上面校驗的正則表達式的第二部分后面加多了個號,即變成這樣這里加了個號這樣之后,運行原有的程序就沒有問題了。 正則表達式是程序員經常使用的工具之一。本文作者通過一個正則表達式的陷阱,先深入剖析了出現問題的原因,后給出怎么處理這類問題的方法。最后還給出了一些檢測常見正則表達式問題的工具,十分值得深入研究。前幾天線上一個項目監控信息突然報告異常,上到機器上后查看相關資源的使用情況,發現 CPU...
閱讀 1261·2023-04-25 19:10
閱讀 1140·2021-09-10 10:50
閱讀 3028·2021-09-02 15:21
閱讀 1383·2019-08-30 15:52
閱讀 1681·2019-08-30 13:56
閱讀 2078·2019-08-30 12:53
閱讀 1870·2019-08-28 18:22
閱讀 2115·2019-08-26 13:47