亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS教程:匿名函數

2024-09-06 12:40:59
字體:
來源:轉載
供稿:網友

毫無疑問,john resig 是一個細致且善于思考的人,對于我們通常使用的匿名函數,在他的細究之下,也能挖掘出一些新的東西。通常情況下,當一個函數調用自身時,遞歸就出現了,對于下面這樣的函數調用,我們并不陌生。

1.function yell(n){
2.       return n > 0 ? yell(n-1) + "a" : "hiy";
3.}
4.alert( yell(4))//結果為:hiyaaaa;

單個函數看不出任何問題,如果我們使用匿名函數,并將其放置到一個對象內部,結果會怎樣?

1.var ninja = {
2.         yell: function(n){
3.                 return n > 0 ? ninja.yell(n-1) + "a" : "hiy";
4.         }
5.};
6.alert( yell(4))//結果為:hiyaaaa;

現在我們看不出任何問題所在,如果我們創建一個新的對象,從ninja 那里復制yell方法,情況就有所不同了。既然匿名函數在ninja 內部,那么該方法仍是對ninja對象yell方法的引用。如果我們重新定義ninja對象,問題就出現了。


01.var ninja = {
02.           yell: function(n){
03.                 return n > 0 ? ninja.yell(n-1) + "a" : "hiy";
04.          }
05.};
06.var samurai = { yell: ninja.yell };
07.var ninja = {};
08.try {
09.       alert(samurai.yell(4);
10.} catch(e){
11.       alert("uh, this isn't good! where'd ninja.yell go?" );
12.}
13.//結果是:"uh, this isn't good! where'd ninja.yell go?"

如何解決該問題?如何使yell方法更可靠?最常見的方法是在ninja.yell方法內部使用“this”來改變ninja對象的所有實例,即:

1.var ninja = {
2.          yell: function(n){
3.                return n > 0 ? this.yell(n-1) + "a" : "hiy";
4.         }
5.};

現在我們測試,將會得到我們需要的結果。這當然是一種方法,另外一種方法是給匿名函數命名,這看似矛盾,但的確能很好的工作,瞧:


01.var ninja = {
02.           yell: function yell(n){
03.                  return n > 0 ? yell(n-1) + "a" : "hiy";
04.           }
05.};
06.alert((ninja.yell(4)) + "  works as we would expect it to!" );
07.var samurai = { yell: ninja.yell };
08.var ninja = {};
09.alert( (samurai.yell(4))+ "  the method correctly calls itself." );

給匿名函數命名可以更進一層,對于正常的變量聲明,我們也可以嘗試這樣做,如:


1.var ninja = function myninja(){
2.        alert( (ninja == myninja) + " this function is named two things - at once!" );
3.};
4.ninja();

運行上面的這個函數,在 ie中,我么看到的是:”flase this function is named two things – at once!”,在ff中我們看到的是:”true this function is named two things – at once!”。作者曾指出:匿名函數可以命名,但只在函數自身內部可見??磥聿⒉皇悄敲椿厥?,測試結果表明,對于ie,并不可見,而在ff中,結果正如作者所料。同時,我們檢測myninja,結果在ie和ff也有所不同。


1.alert( typeof myninja);
2.//在ff中為"undefinde"
3.//在ie中為"function"

這樣看來,給匿名函數命名,在ie中,只在外部可見;在ff中,只在函數內部可見。其實,我們可以使用arguments.callee獲得我們所需要的結果,如下:


1.var ninja = {
2.            yell: function(n){
3.                   return n > 0 ? arguments.callee(n-1) + "a" : "hiy";
4.            }
5.};
6.alert( ninja.yell(4));

arguments.callee是對于每一個函數都可以使用,它提供給我們一個可靠的方法去訪問函數自身。本人覺得,該方法比較簡潔可靠。

綜上所述,所有這些方法對我們處理復雜的代碼結構將大有裨益。選擇使用可以使我們的代碼結構更加簡潔明了,這也許是作者的初衷。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本高清不卡的在线| 91禁外国网站| 欧美在线精品免播放器视频| 亚洲精品国精品久久99热| 亚洲另类xxxx| 欧美男插女视频| 日韩在线视频中文字幕| 91精品免费久久久久久久久| 人人做人人澡人人爽欧美| 欧美国产日韩中文字幕在线| 中文字幕视频在线免费欧美日韩综合在线看| 久久福利视频导航| 欧美亚洲国产成人精品| 成人网欧美在线视频| 高清欧美性猛交xxxx黑人猛交| 亚洲一区二区中文| 精品伊人久久97| 日韩在线免费视频观看| 97久久精品视频| 日本免费一区二区三区视频观看| 国产精品视频自在线| 欧美成人四级hd版| 国产91|九色| 亚洲天堂第二页| 亚洲在线视频福利| 一区二区三区视频观看| 国产亚洲人成网站在线观看| 热久久99这里有精品| 国产91精品不卡视频| 精品亚洲一区二区三区在线播放| 久久国产精品久久久久久| 色悠久久久久综合先锋影音下载| 久久免费视频这里只有精品| 国产精品丝袜久久久久久不卡| 国产精品久久久久久久午夜| 成人网页在线免费观看| 日韩精品免费电影| 欧美一级在线亚洲天堂| 一区二区在线视频播放| 日韩在线视频播放| 精品电影在线观看| www高清在线视频日韩欧美| 国产精品久久久久久超碰| 日韩有码在线视频| 国外成人在线直播| 欧美在线播放视频| 色多多国产成人永久免费网站| 欧美三级免费观看| 欧美在线国产精品| 日韩精品一区二区三区第95| 亚洲国产日韩精品在线| 日韩欧美一区二区三区| 国产精品对白刺激| 亚洲女同性videos| 国产精品视频26uuu| 国产91|九色| 日韩在线观看免费高清完整版| 国产精品入口免费视频一| 在线播放国产一区中文字幕剧情欧美| 亚洲电影免费观看高清完整版| 亚洲天堂成人在线| 日韩欧美一区视频| 精品一区二区三区四区| 国产视频精品一区二区三区| 亚洲a中文字幕| 最好看的2019年中文视频| 日韩av网站大全| 久久久久免费视频| 自拍偷拍亚洲一区| 亚洲一区二区三区四区视频| 韩国精品久久久999| 欧美日韩加勒比精品一区| 亚洲一区二区三区四区在线播放| 亚洲最大福利视频网站| 秋霞午夜一区二区| 国产欧美日韩精品丝袜高跟鞋| 亚洲色无码播放| 欧洲精品毛片网站| 亚洲一区二区三区在线免费观看| 国产精品久久久久久久电影| 欧美乱妇高清无乱码| 成人h视频在线观看播放| 91香蕉嫩草神马影院在线观看| 亚洲视频国产视频| 国产成人亚洲综合91| 亚洲成人三级在线| 黑人巨大精品欧美一区二区三区| 91精品国产91久久久久久不卡| 精品国产精品自拍| 亚洲自拍高清视频网站| 在线观看中文字幕亚洲| 日韩在线视频一区| 中文字幕日韩综合av| 欧美激情一区二区久久久| 久久男人av资源网站| 午夜精品久久久久久久99黑人| 亚洲在线www| 亚洲精品一区二区网址| 国产精品99久久久久久久久久久久| 亚洲女成人图区| 亚洲国产婷婷香蕉久久久久久| 久久久久久久久久久国产| 亚洲欧美日韩精品久久亚洲区| 国模精品系列视频| 亚洲欧美日韩综合| 欧美日韩中国免费专区在线看| 亚洲国产另类 国产精品国产免费| 亚洲国产一区自拍| 伊人久久男人天堂| 中文字幕久热精品视频在线| 精品国产欧美成人夜夜嗨| 国产精品v片在线观看不卡| 亚洲精品www久久久久久广东| 综合av色偷偷网| 日韩在线观看你懂的| 亚洲社区在线观看| 动漫精品一区二区| 国产成人精品免费久久久久| 国产精品综合网站| 精品无人区乱码1区2区3区在线| 国产a级全部精品| 欧美一级视频一区二区| 欧美—级a级欧美特级ar全黄| 久久天天躁夜夜躁狠狠躁2022| 欧美日本国产在线| 成人免费网站在线观看| 精品在线小视频| 欧美与黑人午夜性猛交久久久| 亚洲丝袜一区在线| 亚洲毛茸茸少妇高潮呻吟| 51精品国产黑色丝袜高跟鞋| 欧美一区二区三区图| 亚洲免费电影一区| 国产精品精品一区二区三区午夜版| 欧美中文在线视频| 欧美激情亚洲激情| 国外视频精品毛片| 97久久精品人人澡人人爽缅北| 91精品在线看| 国产精品视频免费观看www| 精品中文字幕视频| 91久久精品美女高潮| 国精产品一区一区三区有限在线| 国产一区二区久久精品| 久久99国产精品久久久久久久久| 日韩av一区二区在线| 亚洲国产成人爱av在线播放| 成人午夜高潮视频| 日韩av成人在线| 欧美黄色小视频| 91av国产在线| 91夜夜揉人人捏人人添红杏| 久久视频在线看| 欧美高清不卡在线| 国产精品视频精品| 日韩成人xxxx| 亚洲精品456在线播放狼人| 在线播放国产一区二区三区| 色多多国产成人永久免费网站| 亚洲社区在线观看| 久久精品国亚洲| 在线日韩中文字幕| 精品久久久久久国产| 成人黄色av免费在线观看|