最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2010年06月29日 01:19:19   作者:  
想起自己很久以前學習javascript的經(jīng)歷,也曾經(jīng)碰到過幾個由匿名函數(shù)造成的困擾(其中一個就是由閉包引起的),下面就整理幾段簡單代碼討論一下,讓我們大家一起進步。
1、簡單形式的封裝調用
復制代碼 代碼如下:

var userName = function() { return "jeff wong" } ();
alert(userName);


上面的代碼確實簡單,我們可以逐步分解成下面的寫法:
復制代碼 代碼如下:

var anonymousFunc = function() { return "jeff wong" }; //匿名函數(shù)
var name = anonymousFunc(); //執(zhí)行該函數(shù) 返回人名
alert(name);


2、new 一下Function的形式(大寫Function)
復制代碼 代碼如下:

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ù)當然可以執(zhí)行,我們可以繼續(xù)試試下面的代碼驗證自己的猜測:
復制代碼 代碼如下:

alert(b()); //undefined
alert(a()); //腳本錯誤 提示“缺少函數(shù)”



3、new 一下function也大有乾坤(小寫function)
(1)、簡單的空函數(shù)
復制代碼 代碼如下:

var func = new function() { };
alert(typeof (func)); //object
alert(func); //[object Object]
//alert(func()); //腳本錯誤 func不是函數(shù)



其實上面的代碼也就等價于下面的寫法:
復制代碼 代碼如下:

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ù)



其實上面的代碼也就等價于下面的寫法:
復制代碼 代碼如下:

function anonymousClass() { return "jeff wong"; } //匿名類
var instance = new anonymousClass();
alert(typeof (instance));//object
alert(instance); //[object Object]


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

下面的代碼請注意和(2)中的區(qū)分一下,因為接下來要重點討論的就是那一點點的不同書寫形式:
復制代碼 代碼如下:

var func = new function() { return new String("jeff wong"); };
alert(typeof (func)); //object 意料之中
alert(func); //這里?!
//alert(func()); //腳本錯誤 缺少函數(shù)



上面代碼的等價形式依然簡單:
復制代碼 代碼如下:

function anonymousClass() { return new String("jeff wong"); }
var instance = new anonymousClass();
alert(typeof (instance));
alert(instance);


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

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

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

復制代碼 代碼如下:

var func = new function() { var str = new String("jeff wong"); return str; };//再換種寫法
//alert(typeof (func)); //object 意料之中
alert(func); //猜一下這里應該是什么結果?

作者:Jeff Wong

相關文章

  • es6函數(shù)之嚴格模式用法實例分析

    es6函數(shù)之嚴格模式用法實例分析

    這篇文章主要介紹了es6函數(shù)之嚴格模式用法,結合實例形式分析了es6函數(shù)嚴格模式的定義、用法及操作注意事項,需要的朋友可以參考下
    2020-03-03
  • JavaScript避免代碼的重復執(zhí)行經(jīng)驗技巧分享

    JavaScript避免代碼的重復執(zhí)行經(jīng)驗技巧分享

    經(jīng)常會發(fā)現(xiàn)一個問題,那就是重復的代碼執(zhí)行,下面就是一些在查看它們的源代碼時發(fā)現(xiàn)一些問題,把這些分享給大家,希望能讓你們更加簡潔高效的寫出JavaScript代碼
    2014-04-04
  • JS實現(xiàn)拖動滑塊驗證

    JS實現(xiàn)拖動滑塊驗證

    這篇文章主要為大家詳細介紹了JS實現(xiàn)拖動滑塊驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • js實現(xiàn)改進的仿藍色論壇導航菜單效果代碼

    js實現(xiàn)改進的仿藍色論壇導航菜單效果代碼

    這篇文章主要介紹了js實現(xiàn)改進的仿藍色論壇導航菜單效果代碼,涉及JavaScript頁面元素的遍歷及樣式動態(tài)變換技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 微信小程序封裝網(wǎng)絡請求和攔截器實戰(zhàn)步驟

    微信小程序封裝網(wǎng)絡請求和攔截器實戰(zhàn)步驟

    這篇文章主要介紹了微信小程序封裝網(wǎng)絡請求和攔截器實戰(zhàn)步驟,這樣可以提高開發(fā)效率,減少代碼重復,同時也可以提高代碼的可維護性和可讀性
    2023-03-03
  • 原生js自定義右鍵菜單

    原生js自定義右鍵菜單

    這篇文章主要為大家詳細介紹了原生js自定義右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 清空代碼防止查看源代碼的js代碼

    清空代碼防止查看源代碼的js代碼

    清空代碼防止查看源代碼的js代碼...
    2007-07-07
  • 微信小程序之數(shù)據(jù)綁定原理解析

    微信小程序之數(shù)據(jù)綁定原理解析

    這篇文章主要介紹了微信小程序之數(shù)據(jù)綁定原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • mustache.js實現(xiàn)首頁元件動態(tài)渲染的示例代碼

    mustache.js實現(xiàn)首頁元件動態(tài)渲染的示例代碼

    這篇文章主要介紹了mustache.js實現(xiàn)首頁元件動態(tài)渲染的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • js實現(xiàn)計算器功能

    js實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了js實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評論

石台县| 科技| 沂源县| 洮南市| 乡宁县| 青冈县| 山阳县| 西充县| 萝北县| 龙陵县| 海安县| 巴东县| 南投县| 仁化县| 平谷区| 兴文县| 新河县| 垦利县| 琼海市| 定西市| 虎林市| 鹰潭市| 商城县| 宝兴县| 靖远县| 浑源县| 云和县| 菏泽市| 会同县| 梓潼县| 双流县| 横山县| 河津市| 伽师县| 迭部县| 星座| 泾源县| 瓦房店市| 资溪县| 琼海市| 淄博市|