function fun(n,o){
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
}
}
var a = fun(0).fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0);
c.fun(1);
c.fun(2);
c.fun(3);
問a,b,c分別輸出什么???
各位大神,這應該怎么解析呢?!痑,b,c這賦值寫法很少見?
第一個:var a = fun(0).fun(1);相當于執(zhí)行外面的fun(n,o)函數(shù),因為o沒有傳參,所以console.log(o)為undefined,然后
return {
fun:function(m){
return fun(m,n);
}
}
的意思就是將里面的fun:function(m)賦值給fun(0),然后在則行他,相當于則行fun(m,n),最后結(jié)果賦值給a
var a = fun(0).fun(1);
a.fun(2);
a.fun(3); 的完整流程:
fun(0) == fun(n,o){
//這里o沒傳參,所以值為undefined
console.log(o); o = undefined
return fun:function(m){ //到了這一步,就相當于 fun() = fun:function(m){return
fun(m,n);}
return fun(m,n); n = 1 //接受上面的參數(shù),為1
}
}
然后fun(0).fun(1) 就相當于執(zhí)行了 剛剛return會來的函數(shù) fun(m,1),又回到最外層的函數(shù),以此類推
輸出結(jié)果為:undefined,0,1,1
語言組織能力一般,請見諒
function fun(n,o){ //fun一
console.log(o);
return {
fun:function(m){ //fun二
return fun(m,n); //fun三
}
}
}
首先要弄清楚這里的三個fun到底是指的什么
fun一:一個全局的函數(shù),返回值是一個對象obj
fun二:是返回對象obj里面的一個鍵(key),這個鍵對應的是一個匿名函數(shù)
fun三:調(diào)用的fun一
從最開始理解var a = fun(0).fun(1);
最先執(zhí)行的是fun(0)這個時候沒有第二個參數(shù)o,所以為undefined。
這個時候fun(0)返回了一個對象:
{
fun:function(m){
return fun(m,0);
}
}
var a = fun(0).fun(1);
//這時候再把1帶入就是
var a = function(1){ return fun(1,0)};
//其實就是
var a = fun(1,0); //這個時候o為0 ----打印為0
//返回的對象為
{
fun:function(m){
return fun(m,1);
}
}
a.fun(2); //也就是 fun(2,1) ----打印為1
a.fun(3); //也就是 fun(3,1) ----打印為1
//a一系列的打印下來 undefined 0 1 1
后面的B和C像這樣一部一部的推即可
var a = fun(0).fun(1);
//這里執(zhí)行fun(0),打印o,o為undefined,并返回一個對象{fun:function(m){return fun(m,n);}},對象里的n指向0
//接下來執(zhí)行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的運行結(jié)果,即打印0,并把{fun:function(m){return fun(m,n);}}賦值給a(此時n指向1)
//記住 a = {fun:function(m){return fun(m,n);}} (此時n指向1)
a.fun(2);
//這里執(zhí)行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的運行結(jié)果,即打印1,并返回{fun:function(m){return fun(m,n);}},沒有接收方
a.fun(3);
//這里執(zhí)行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(3,1)的運行結(jié)果,即打印1,并返回{fun:function(m){return fun(m,n);}},沒有接收方
var b =fun(0).fun(1).fun(2).fun(3);
//這里執(zhí)行fun(0),打印o,o為undefined,并返回一個對象{fun:function(m){return fun(m,n);}},對象里的n指向0
//接下來執(zhí)行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的運行結(jié)果,即打印0,并返回{fun:function(m){return fun(m,n);}} (此時n指向1)
//接下來執(zhí)行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的運行結(jié)果,即打印1,并返回{fun:function(m){return fun(m,n);}} (此時n指向2)
//接下來執(zhí)行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,2)的運行結(jié)果,即打印2,并返回{fun:function(m){return fun(m,n);}}賦值給b (此時n指向3)
var c =fun(0);
//這里執(zhí)行fun(0),打印o,o為undefined,并返回一個對象{fun:function(m){return fun(m,n);}}賦值給c,對象里的n指向0
c.fun(1);
//這里執(zhí)行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的運行結(jié)果,即打印0,并返回{fun:function(m){return fun(m,n);}},沒有接收方
c.fun(2);
//這里執(zhí)行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,0)的運行結(jié)果,即打印0,并返回{fun:function(m){return fun(m,n);}},沒有接收方
c.fun(3);
//這里執(zhí)行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,0)的運行結(jié)果,即打印0,并返回{fun:function(m){return fun(m,n);}},沒有接收方北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。