HTML5學堂-碼匠:計時器的第一個參數,包含幾種不一樣的書寫方法,能夠是函數名,匿名函數,JS代碼字符串,還有一些面試題當中會出現「函數調用」的書寫方式。面試
那麼,這些不一樣的書寫方法分別表示什麼呢?在計時器中出現的第一個參數,做用域又是在哪裏建立的?安全
這是最爲常見的一種書寫方法,該方法表示的是,在固定毫秒以後,將這個函數名的函數添加到執行隊列當中,讓其執行。函數
當一個函數有參數時,不少人會採用這樣的調用方法。性能
Tips:參數爲文字時,能夠用單引號內包雙引,或雙引號內包單引的方式書寫。學習
setTimeout 和 setInterval 均可以接受字符串(做爲第一個參數),可是並不推薦使用這種書寫方法。緣由在於:爲了可以運行,會在代碼執行時,將字符串經過eval方法進行轉換。this
eval方法,其做用就是把字符串當作JS去執行。eval雖然可以解決不少問題,有很大的做用,可是也廣爲詬病,其性能問題,安全性問題,以及在JS嚴格模式與非嚴格模式的不一樣。spa
因爲這些缺點,使得衆多開發者在項目和代碼中,儘可能規避了對它的使用。3d
當函數有參數要傳遞,而又不能使用字符串式的書寫方法,此時,匿名函數的書寫方法就派上了用場。blog
這種書寫方法,自己是錯誤的,幾乎在實際開發當中是沒法找到的。固然在偶爾會在面試當中以「坑」的形式出現……隊列
此處第一個函數會在執行到計時器這行代碼時,當即執行,而返回的是h5course函數的返回值,而非函數自己。若是函數返回默認返回值undefined,setInterval也不會報錯。
計時器的第一個參數,默認在全局做用域中執行,所以函數內的 this 將會指向window。
Tips:運行結果爲true
Tips:運行結果爲true
Tips:答案請見文章底部
Tips:答案請見文章底部
Tips:答案請見文章底部
當要執行的函數沒有參數時,能夠直接使用函數名調用
當須要向回調函數中傳遞參數時,不要使用字符串作參數,使用匿名函數作參數,並在匿名函數內部執行回調函數。
第一參數的函數會在全局做用域中進行執行
第一題:先輸出10,以後大概1秒後,同時輸出10個10。
第二題:約1000毫秒(即約1秒)
第三題:在函數執行時,兩個li的背景顏色當即被設置爲了紅色,通過大概5000毫秒以後,控制檯報錯(兩個錯誤),錯誤內容均爲「red is not defined」
生活艱辛,代碼不易,但,不要忘記微笑!
版權聲明:該圖來自「【美】莉茲·克里莫 (author)」的書籍《你今天真好看》