上面的代碼確實(shí)簡(jiǎn)單,我們可以逐步分解成下面的寫(xiě)法: 復(fù)制代碼 代碼如下: var anonymousFunc = " /> 男人天堂手机在线,日韩欧美高清在线观看,一级黄色一级片

四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

通過(guò)javascript的匿名函數(shù)來(lái)分析幾段簡(jiǎn)單有趣的代碼

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


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


2、new 一下Function的形式(大寫(xiě)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一個(gè)Object,變量a彈出的是[object Object],而new一個(gè)Function(注意,是大寫(xiě)Function),b在彈出的時(shí)候,生成了匿名函數(shù)。 既然b是匿名函數(shù),函數(shù)當(dāng)然可以執(zhí)行,我們可以繼續(xù)試試下面的代碼驗(yàn)證自己的猜測(cè):
復(fù)制代碼 代碼如下:
alert(b()); //undefined
alert(a()); //腳本錯(cuò)誤 提示“缺少函數(shù)”



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



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

[code]

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



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


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

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



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


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

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

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

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

作者:Jeff Wong

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

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

主站蜘蛛池模板: 地理填充图册| 恰纳卡莱之战完整版在线观看| 蜜蜂图片| 神州第一刀电影免费观看| 恋爱症候群| 曹查理新剧《三姐妹》| 我仍在此 电影| 和平视频| 进击的巨人2| 夕雾| 九九九九九九九伊人| 夜之女王 电影| 台湾电视台| 河北美术学院教务系统| 守株待兔的故事讲解视频完整版| 小矮人的一级毛片| 超越情感电视剧免费观看全集完整版| 猫鼠| 说木叶原文| 卫星掉落| 各各他的路赞美诗歌| 暴风前夜 电影| 帕兰妮·琳帕缇雅空| 琪琪看片| jixxzz| 保坂尚辉| 李鸿杰| 监狱女狱警的电影叫啥来着| 山东教育电视台直播在线观看| 远方的故乡简谱| 现代古诗冰心| 热血街区| 姐夫操小姨子| 小腿垫东西睡觉正确图| 贾樟柯对毕赣的评价| 雳剑 电视剧演员表| 诺斯费拉图2024| 太太的情人电影| 拔萝卜无删减| angelina全集在线观看| 武汉日夜|