js 異步操作回調(diào)函數(shù)如何控制執(zhí)行順序
更新時(shí)間:2013年12月24日 15:38:32 作者:
本文為大家講解下js異步操作時(shí)回調(diào)函數(shù)如何控制執(zhí)行順序,感興趣的朋友可以參考下
需求:
fun A() { asyn(parm1, parm2, onsuccess(){ }) ;}
fun B() {asyn(paem1, parm2, onsuccess(){}) ;}
函數(shù)B要求執(zhí)行在函數(shù)A之后
異步執(zhí)行
如果直接使用
A();
B();
是不能夠滿足執(zhí)行條件的。
考慮將B作為回調(diào)函數(shù)傳遞給A,然后A再執(zhí)行的onsucess中執(zhí)行B函數(shù)
A(B);
即可實(shí)現(xiàn)功能需求。
js是單線程的.
1、調(diào)用函數(shù)時(shí),如果參數(shù)多于定義時(shí)的個(gè)數(shù),則多余的參數(shù)將會(huì)被忽略,如果少于定義時(shí)的個(gè)數(shù)則缺失的參數(shù)數(shù)會(huì)被自動(dòng)賦予undefined值。
2、如果是用function語句聲明的函數(shù)定義則不可以出現(xiàn)在循環(huán)或條件語句中,但是如果是用函數(shù)直接量方法的函數(shù)定義則可以出現(xiàn)在任何js表達(dá)式中。
3、arguments對(duì)象
函數(shù)的arguments對(duì)象就像一個(gè)數(shù)組,里面保存著函數(shù)調(diào)用時(shí)的實(shí)際參數(shù),可以用arguments[0]、arguments[1]、arguments[2]…等來引用這些參數(shù),即使這些參數(shù)在定義函數(shù)時(shí)是沒有的。但arguments并非真正的數(shù)組對(duì)象。
function a(x,y){
arguments[0] //表示第一個(gè)參數(shù)x
arguments[1] //表示第一個(gè)參數(shù)y
arguments[2] //表示第三個(gè)參數(shù),前提是在調(diào)用函數(shù)時(shí)傳入了三個(gè)參數(shù)
…
arguments.length //表示實(shí)際傳入?yún)?shù)的個(gè)數(shù)
arguments.callee(x,y) //調(diào)用自身 }
arguments對(duì)象具有l(wèi)ength屬性,表示的是函數(shù)調(diào)用時(shí)實(shí)際傳入的參數(shù)的個(gè)數(shù)。
arguments對(duì)象還具有callee屬性,用來引用當(dāng)前正在執(zhí)行的函數(shù),這個(gè)在匿名函數(shù)中尤其有用。
4、函數(shù)的length屬性(沒錯(cuò),函數(shù)也是具有l(wèi)ength屬性的)
與arguments.length不同,函數(shù)的length屬性表示的是在定義函數(shù)時(shí)的形參個(gè)數(shù),而不是函數(shù)調(diào)用時(shí)的實(shí)際參數(shù)個(gè)數(shù)??梢杂胊rguments.callee.length來調(diào)用函數(shù)的length屬性。
fun A() { asyn(parm1, parm2, onsuccess(){ }) ;}
fun B() {asyn(paem1, parm2, onsuccess(){}) ;}
函數(shù)B要求執(zhí)行在函數(shù)A之后
異步執(zhí)行
如果直接使用
A();
B();
是不能夠滿足執(zhí)行條件的。
考慮將B作為回調(diào)函數(shù)傳遞給A,然后A再執(zhí)行的onsucess中執(zhí)行B函數(shù)
A(B);
即可實(shí)現(xiàn)功能需求。
js是單線程的.
1、調(diào)用函數(shù)時(shí),如果參數(shù)多于定義時(shí)的個(gè)數(shù),則多余的參數(shù)將會(huì)被忽略,如果少于定義時(shí)的個(gè)數(shù)則缺失的參數(shù)數(shù)會(huì)被自動(dòng)賦予undefined值。
2、如果是用function語句聲明的函數(shù)定義則不可以出現(xiàn)在循環(huán)或條件語句中,但是如果是用函數(shù)直接量方法的函數(shù)定義則可以出現(xiàn)在任何js表達(dá)式中。
3、arguments對(duì)象
函數(shù)的arguments對(duì)象就像一個(gè)數(shù)組,里面保存著函數(shù)調(diào)用時(shí)的實(shí)際參數(shù),可以用arguments[0]、arguments[1]、arguments[2]…等來引用這些參數(shù),即使這些參數(shù)在定義函數(shù)時(shí)是沒有的。但arguments并非真正的數(shù)組對(duì)象。
function a(x,y){
arguments[0] //表示第一個(gè)參數(shù)x
arguments[1] //表示第一個(gè)參數(shù)y
arguments[2] //表示第三個(gè)參數(shù),前提是在調(diào)用函數(shù)時(shí)傳入了三個(gè)參數(shù)
…
arguments.length //表示實(shí)際傳入?yún)?shù)的個(gè)數(shù)
arguments.callee(x,y) //調(diào)用自身 }
arguments對(duì)象具有l(wèi)ength屬性,表示的是函數(shù)調(diào)用時(shí)實(shí)際傳入的參數(shù)的個(gè)數(shù)。
arguments對(duì)象還具有callee屬性,用來引用當(dāng)前正在執(zhí)行的函數(shù),這個(gè)在匿名函數(shù)中尤其有用。
4、函數(shù)的length屬性(沒錯(cuò),函數(shù)也是具有l(wèi)ength屬性的)
與arguments.length不同,函數(shù)的length屬性表示的是在定義函數(shù)時(shí)的形參個(gè)數(shù),而不是函數(shù)調(diào)用時(shí)的實(shí)際參數(shù)個(gè)數(shù)??梢杂胊rguments.callee.length來調(diào)用函數(shù)的length屬性。
相關(guān)文章
JavaScript創(chuàng)建對(duì)象方法實(shí)例小結(jié)
這篇文章主要介紹了JavaScript創(chuàng)建對(duì)象方法,結(jié)合實(shí)例形式總結(jié)了javascript創(chuàng)建對(duì)象的基本原理及使用工廠模式、構(gòu)造函數(shù)模式與原型模式創(chuàng)建對(duì)象的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-09-09
利用location.hash實(shí)現(xiàn)跨域iframe自適應(yīng)
其他一些類似js跨域操作問題也可以按這個(gè)思路去解決,需要的朋友可以測(cè)試下。2010-05-05
uniapp插件uview下表單無法動(dòng)態(tài)校驗(yàn)的問題解決
最近項(xiàng)目中用到了uview?在做表單時(shí)用到了校驗(yàn),發(fā)現(xiàn)校驗(yàn)不友好的結(jié)果,下面這篇文章主要給大家介紹了關(guān)于uniapp插件uview下表單無法動(dòng)態(tài)校驗(yàn)的問題解決,需要的朋友可以參考下2022-12-12
Axios+Spring?Boot實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了Axios+Spring?Boot實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
關(guān)于JavaScript中JSON的5個(gè)小技巧分享
這篇文章主要和大家分享五個(gè)JavaScript中的JSON技巧,例如:隱藏字符串化數(shù)據(jù)中的某些屬性、創(chuàng)建自定義輸出格式等,感興趣的小伙伴可以了解一下2022-03-03
javascript實(shí)現(xiàn)了照片拖拽點(diǎn)擊置頂?shù)恼掌瑝Υa
這篇文章主要介紹了javascript實(shí)現(xiàn)了照片拖拽點(diǎn)擊置頂?shù)恼掌瑝Υa,效果非常不錯(cuò),這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04

