javascript的解析執(zhí)行順序在各個瀏覽器中的不同
簡介
javascript是一種解釋型語言,它的執(zhí)行是自上而下的。但是各瀏覽器對于【自上而下】的理解是有細(xì)微差別的,而代碼的上下游也就是程序流對于程序正確運(yùn)行又是至關(guān)重要的。所以我們有必要深入理解js的執(zhí)行順序。為此,我設(shè)計了如下八個實驗來獲得最確切的結(jié)果。
實驗
<script type="text/javascript"> //實驗一: function t(a) { alert("[t(a)]a:" + a); } function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } t(1); //結(jié)果: //[t(a, b)]a:1, b:undefined //實驗二: function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } function t(a) { alert("[t(a)]a:" + a); } t(1); //結(jié)果: //[t(a)]a:1 //實驗三: function t(a) { alert("[t(a)]a:" + a); } function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } t(1, 2); //結(jié)果: //[t(a, b)]a:1, b:2 //實驗四: function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } function t(a) { alert("[t(a)]a:" + a); } t(1, 2); //結(jié)果: //[t(a)]a:1 //實驗五 function t(a) { alert("[t(a)]a:" + a); } t(1); function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } //結(jié)果: //[t(a, b)]a:1, b:undefined //實驗六 function t(a) { alert("[t(a)]a:" + a); } t(1, 2); function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } //結(jié)果: //[t(a, b)]a:1, b:2 //實驗七 function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } t(1); function t(a) { alert("[t(a)]a:" + a); } //結(jié)果: //[t(a)]a:1 //實驗八 function t(a, b) { alert("[t(a, b)]a:" + a + ", b:" + b); } t(1, 2); function t(a) { alert("[t(a)]a:" + a); } //結(jié)果: //[t(a)]a:1 </script>
后記
定義javascript函數(shù)時,函數(shù)名是函數(shù)對象的標(biāo)識,參數(shù)數(shù)量只是這個函數(shù)的屬性??慷x參數(shù)數(shù)量不同的函數(shù)實現(xiàn)重載是不行的。
調(diào)用函數(shù)時,js通過函數(shù)名找到對應(yīng)的函數(shù)對象,然后根據(jù)函數(shù)定義時的參數(shù),和表達(dá)式參數(shù)列表按順序匹配,多余的參數(shù)舍去,不夠的參數(shù)按undefined處理,然后執(zhí)行函數(shù)代碼。
所以定義函數(shù)時,通常把必選參數(shù)放在參數(shù)列表最前面,可選參數(shù)放在必選參數(shù)后面。
注意事項
一、上述八個實驗的結(jié)果是經(jīng)過360瀏覽器(版本/內(nèi)核:6.3.1.142/21.0.1180.89)和火狐瀏覽器(版本:27.0.1)運(yùn)行得出的。
二、上述八個實驗是相互獨(dú)立的,請分別單獨(dú)運(yùn)行以得到正確的結(jié)果。
- JavaScript 全面解析各種瀏覽器網(wǎng)頁中的JS 執(zhí)行順序
- JavaScript 在各個瀏覽器中執(zhí)行的耐性
- Html中JS腳本執(zhí)行順序簡單舉例說明
- javascript attachEvent綁定多個事件執(zhí)行順序問題
- 如何確保JavaScript的執(zhí)行順序 之jQuery.html深度分析
- 如何確保JavaScript的執(zhí)行順序 之jQuery.html并非萬能鑰匙
- 如何確保JavaScript的執(zhí)行順序 之實戰(zhàn)篇
- 解決火狐瀏覽器下JS setTimeout函數(shù)不兼容失效不執(zhí)行的方法
- Javascript代碼在頁面加載時的執(zhí)行順序介紹
- js 異步操作回調(diào)函數(shù)如何控制執(zhí)行順序
- js判斷瀏覽器類型為ie6時不執(zhí)行
- 探析瀏覽器執(zhí)行JavaScript腳本加載與代碼執(zhí)行順序
相關(guān)文章
javascript簡單拖拽實現(xiàn)代碼(鼠標(biāo)事件 mousedown mousemove mouseup)
javascript簡單拖拽,簡單拖拽實現(xiàn)2012-05-05bootstrap table動態(tài)加載數(shù)據(jù)示例代碼
本篇文章主要介紹了bootstrap table動態(tài)加載數(shù)據(jù)示例代碼,可以實現(xiàn)點(diǎn)擊選擇按鈕,彈出模態(tài)框,加載出關(guān)鍵詞列表,有興趣的可以了解一下。2017-03-03微信JSSDK實現(xiàn)打開攝像頭拍照再將相片保存到服務(wù)器
這篇文章主要介紹了微信JSSDK實現(xiàn)打開攝像頭拍照再將相片保存到服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Js逆向?qū)崿F(xiàn)滑動驗證碼圖片還原的示例代碼
這篇文章主要介紹了Js逆向?qū)崿F(xiàn)滑動驗證碼圖片還原的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03JavaScript人臉識別技術(shù)及臉部識別JavaScript類庫Tracking.js
人臉識別的JavaScript程序包是Face Detection,它是由Jay Salvat和Liu Liu開發(fā)的。它是一個標(biāo)準(zhǔn)的jQuery插件,通過對提供的圖片進(jìn)行分析,返回所有找到的臉部圖像的坐標(biāo),感興趣的朋友跟著小編一起學(xué)習(xí)js人臉識別技術(shù)及臉部識別JavaScript類庫Tracking.js吧2015-09-09