上面的代碼確實簡單,我們可以逐步分解成下面的寫法: 復(fù)制代碼 代碼如下: var anonymousFunc = " /> 欧美性appstin孕妇,色偷偷男人,台湾佬综合娱乐网

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

通過javascript的匿名函數(shù)來分析幾段簡單有趣的代碼

1、簡單形式的封裝調(diào)用
復(fù)制代碼 代碼如下:
var userName = function() { return "jeff wong" } ();
alert(userName);


上面的代碼確實簡單,我們可以逐步分解成下面的寫法:
復(fù)制代碼 代碼如下:
var anonymousFunc = function() { return "jeff wong" }; //匿名函數(shù)
var name = anonymousFunc(); //執(zhí)行該函數(shù) 返回人名
alert(name);


2、new 一下Function的形式(大寫Function)
復(fù)制代碼 代碼如下:
var a = new Object();
var b = new Function();
//alert(typeof (a)); //object
//alert(typeof (b)); //function
alert(a); //[object Object]
alert(b); //匿名函數(shù)
//alert(a == b); //false
//alert(a === b); //false



正如你所看到的那樣,我們new一個Object,變量a彈出的是[object Object],而new一個Function(注意,是大寫Function),b在彈出的時候,生成了匿名函數(shù)。 既然b是匿名函數(shù),函數(shù)當(dāng)然可以執(zhí)行,我們可以繼續(xù)試試下面的代碼驗證自己的猜測:
復(fù)制代碼 代碼如下:
alert(b()); //undefined
alert(a()); //腳本錯誤 提示“缺少函數(shù)”



3、new 一下function也大有乾坤(小寫function)
(1)、簡單的空函數(shù)
復(fù)制代碼 代碼如下:
var func = new function() { };
alert(typeof (func)); //object
alert(func); //[object Object]
//alert(func()); //腳本錯誤 func不是函數(shù)



其實上面的代碼也就等價于下面的寫法:
復(fù)制代碼 代碼如下:
function anonymousClass() { } //匿名類
var instance = new anonymousClass();
alert(typeof (instance));//object
alert(instance); //[object Object]

[code]

(2)、函數(shù)帶個返回值的,也不是很難理解
[code]
var func = new function() { return "jeff wong" };
alert(typeof (func));
alert(func);
//alert(func()); //腳本錯誤 缺少函數(shù)



其實上面的代碼也就等價于下面的寫法:
復(fù)制代碼 代碼如下:
function anonymousClass() { return "jeff wong"; } //匿名類
var instance = new anonymousClass();
alert(typeof (instance));//object
alert(instance); //[object Object]


(3)、還是函數(shù)帶個返回值的,寫法稍微有點(diǎn)不同

下面的代碼請注意和(2)中的區(qū)分一下,因為接下來要重點(diǎn)討論的就是那一點(diǎn)點(diǎn)的不同書寫形式:
復(fù)制代碼 代碼如下:
var func = new function() { return new String("jeff wong"); };
alert(typeof (func)); //object 意料之中
alert(func); //這里?!
//alert(func()); //腳本錯誤 缺少函數(shù)



上面代碼的等價形式依然簡單:
復(fù)制代碼 代碼如下:
function anonymousClass() { return new String("jeff wong"); }
var instance = new anonymousClass();
alert(typeof (instance));
alert(instance);


已經(jīng)運(yùn)行看到結(jié)果了嗎?沒錯,第三種寫法我們在彈出func或者instance的時候,都出人意料地得到了一段字符串"jeff wong"。細(xì)心比較(2)和(3)中的代碼,除了return處的寫法稍有不同之外,兩處代碼幾乎完全一致,所以我們推斷,毫無疑問,是new String的形式讓我們的函數(shù)產(chǎn)生了意想不到的效果。 為什么會這樣呢?

原來,在Javascript中,只要在new表達(dá)式之后的constructor返回(return)一個原始類型(無return時其實是return原始類型undefined,如(1)),比如第(2)種寫法,那么就返回new創(chuàng)建的匿名對象;而如果new表達(dá)式之后的constructor返回一個引用對象,比如對象(Object),函數(shù)(function)及數(shù)組(Array)等等,那么返回的該引用對象就將覆蓋new創(chuàng)建的匿名對象。現(xiàn)在再來分析(3)中的寫法,由于new String會構(gòu)造一個字符串引用對象,它就覆蓋了new所創(chuàng)建的匿名對象,而new String的所指向引用值是“jeff wong”,所以彈出的必然是當(dāng)前new String所分配的值。

  最后,留個思考題,大家看看下面的代碼返回什么結(jié)果:

復(fù)制代碼 代碼如下:
var func = new function() { var str = new String("jeff wong"); return str; };//再換種寫法
//alert(typeof (func)); //object 意料之中
alert(func); //猜一下這里應(yīng)該是什么結(jié)果?

作者:Jeff Wong

JavaScript技術(shù)通過javascript的匿名函數(shù)來分析幾段簡單有趣的代碼,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 狠狠狠色丁香婷婷综合久久 | 午夜精品久久久久久影视riav | 久久久久激情免费观看 | 亚洲中文热码在线视频 | 在线免费观看亚洲视频 | 午夜dj免费中文字幕 | 久99视频精品免费观看福利 | 国产精品俺来也在线观看 | 成人国产三级在线播放 | 欧美精品色婷婷五月综合 | 香蕉鱼视频观看在线视频下载 | 萝莉御姐被吸奶 | 琉璃美人煞在线观看 | 视频成人永久免费视频 | 久久久精品成人免费看 | 禁室培欲在线视频免费观看 | 欧美性极品黑人hd | 一个人的视频在线观看免费观看 | 肉伦禁忌小说np | 后式大肥臀国产在线 | 99热这里只有 精品 99热这里只就有精品22 | 性与肉体电影免费观看 | 狠狠色丁香婷婷久久综合 | 老师在讲桌下边h边讲课 | CHINSEFUCKGAY无套| 好紧好湿太硬了我太爽了文字 | 国产成人精品久久一区二区三区 | jjzz韩国| 极品虎白在线观看 | 良家人妻无码专区九色颜射 | 乡村教师电影完整版在线观看 | 麻豆出品国产AV在线观看 | 伊人久久精品线影院 | 最近更新2019中文字幕国语 | 变态露出野外调教 | 久久久久久久免费 | 亚洲欧美国产双大乳头 | 老司机亚洲精品影院在线观看 | 麻豆精品传媒一二三区 | 美女岔开腿露出粉嫩花苞 | 青柠在线观看视频在线高清 |