JS聲明式函數(shù)與賦值式函數(shù)實例分析
本文實例講述了JS聲明式函數(shù)與賦值式函數(shù)。分享給大家供大家參考,具體如下:
引言
“程序是不會騙人的”我們項目中的一個哥們經(jīng)常這樣說,為什么他會有這樣的感嘆呢?就是有時候我么程序員會出現(xiàn)的這樣的問題,當(dāng)我們讓別人來調(diào)試錯誤的時候,別人什么都沒有說,在我們給人家復(fù)現(xiàn)錯誤的時候發(fā)現(xiàn),錯誤竟然沒有了,留下自己在風(fēng)中凌亂。此處中槍的童鞋們請頂起來。。。。。。下面說說小編給別人調(diào)BUG時候遇到的問題如下:
請聽題:說出下面幾段js腳本的結(jié)果是什么?
<script type="text/javascript"> Fn(); //執(zhí)行結(jié)果:????? function Fn(){ alert("執(zhí)行了定義式函數(shù)"); } </script> <script type="text/javascript"> Fn(); //執(zhí)行結(jié)果:????? var Fun= function(){ alert("執(zhí)行了賦值式函數(shù)"); } </script> <script type="text/javascript"> Fn(); //執(zhí)行結(jié)果:????? function Fn(){ alert("執(zhí)行了函數(shù)1"); } function Fn(){ alert("執(zhí)行了函數(shù)2"); } </script>
如果你能很好的得出答案的話,說明你對JS的這兩種函數(shù)以及他們在執(zhí)行順序方面是比較清楚的,所以下面的講解你就可帶著審判的眼光來閱讀了,否則的話你就不得不好好看看下面的講解了,也許下面的講解會給你一些額外的驚喜。
通過上面的代碼中alet中的內(nèi)容我們就可以分辨出這兩種函數(shù),這兩種函數(shù)在js執(zhí)行的時候會出現(xiàn)一些區(qū)別,在JS的預(yù)編譯期,聲明式函數(shù)將會先被提取出來,然后才按順序執(zhí)行js代碼。
事實上,JS的解析過程分為兩個階段:預(yù)編譯期(預(yù)處理)與執(zhí)行期。
預(yù)編譯期JS會對本代碼塊中的所有聲明的變量和函數(shù)進行處理(類似與C語言的編譯),但需要注意的是此時處理函數(shù)的只是聲明式函數(shù),而且變量也只是進行了聲明但未進行初始化以及賦值。知道了這個原理以后我們就可以很好的分析上面的第一段js代碼了,第一個js代碼塊得出的結(jié)果是:執(zhí)行了alert函數(shù);而第二個js代碼塊得出的結(jié)果是:瀏覽器保存,提示函數(shù)未定義!這就是這兩種函數(shù)的不同。
第二段js代碼就是買一贈一優(yōu)惠政策,給讀者贈送的一些東西了,它執(zhí)行的結(jié)果是:彈出"執(zhí)行了函數(shù)2",這是因為在js中重名的函數(shù),后定義的會覆蓋前面定義的函數(shù),這種策略和js的順序執(zhí)行也是有關(guān)系的。小編在最近就是因為遇到了這種函數(shù)給我代碼的麻煩所以才查了一些資料來整理了這篇博客。
小結(jié)
在開始的時候代碼中寫是賦值式函數(shù),但是調(diào)用的代碼寫在了函數(shù)的前面從而導(dǎo)致程序出錯,因為之前對于賦值式函數(shù)見到的并不多,這不知道這兩種函數(shù)的區(qū)別,所以相當(dāng)熱的認為將調(diào)用函數(shù)的代碼寫在函數(shù)定義之前和之后是沒有影響的,所以給小編帶來很大的困惑。當(dāng)然也是我們思想上的相當(dāng)然帶來的后果,一些東西我們并沒有去驗證就認為應(yīng)該是這樣的,從而給我們帶來阻礙,在此也給廣大程序猿們警告哦。。。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript遍歷算法與技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- 深入探討javascript函數(shù)式編程
- JavaScript與函數(shù)式編程解釋
- JavaScript 函數(shù)式編程實踐(來自IBM)
- JavaScript 函數(shù)式編程的原理
- 用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript
- JavaScript的函數(shù)式編程基礎(chǔ)指南
- js 函數(shù)式編程學(xué)習(xí)筆記
- 探究JavaScript函數(shù)式編程的樂趣
- 《JavaScript函數(shù)式編程》讀后感
- JavaScript函數(shù)式編程(Functional Programming)聲明式與命令式實例分析
相關(guān)文章
JavaScript?error瀏覽器端錯誤捕獲處理方法筆記解決示例
這篇文章主要為大家介紹了JavaScript?error瀏覽器端錯誤捕獲處理方法筆記解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06BootStrap Validator對于隱藏域驗證和程序賦值即時驗證的問題淺析
這篇文章主要介紹了BootStrap Validator對于隱藏域驗證和程序賦值即時驗證的問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12JS實現(xiàn)頁面跳轉(zhuǎn)鏈接的幾種方式匯總
這篇文章主要介紹了JS實現(xiàn)頁面跳轉(zhuǎn)鏈接的幾種方式,簡單總結(jié)了幾種頁面跳轉(zhuǎn)功能的實現(xiàn),有使用js跳轉(zhuǎn)頁面,返回上一次預(yù)覽界面及button按鈕添加事件跳轉(zhuǎn),本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2024-01-01es6中class類靜態(tài)方法,靜態(tài)屬性,實例屬性,實例方法的理解與應(yīng)用分析
這篇文章主要介紹了es6中class類靜態(tài)方法,靜態(tài)屬性,實例屬性,實例方法的理解與應(yīng)用,結(jié)合實例形式分析了es6 class類靜態(tài)方法,靜態(tài)屬性,實例屬性,實例方法相關(guān)概念、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2020-02-02