亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript函數(shù)定義的幾種區(qū)別小結(jié)

 更新時(shí)間:2014年01月06日 08:53:34   作者:  
本篇文章主要是對(duì)javascript函數(shù)定義的幾種區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

javascript函數(shù)的定義

1:調(diào)用關(guān)鍵字function來(lái)構(gòu)造,如:
function distance(x1,x2,y1,y2)
{
var dx=x2-x1;
var dy=y2-y1;
return Math.sqrt(dx*dx+dy*dy);
}

2:使用Function()構(gòu)造函數(shù)
var f=new Function*"x","y","return x*y");
這行代碼創(chuàng)建了一個(gè)新函數(shù),該函數(shù)和你所熟悉的語(yǔ)法定義的函數(shù)基本上時(shí)等價(jià)的:

function f(x,y)
{
return x*y;
}

Functino()構(gòu)造函數(shù)可以接受任意多個(gè)字符串參數(shù)。它的最后一個(gè)參數(shù)時(shí)函數(shù)的主體,其中可以包含任何JavaScript語(yǔ)句,語(yǔ)句之間用分號(hào)分隔。其他的參數(shù)都是用來(lái)說(shuō)明函數(shù)要定義的形式參數(shù)名的字符串。如果你定義的函數(shù)沒(méi)有參數(shù),那么可以只需給構(gòu)造函數(shù)傳遞一個(gè)字符串(即函數(shù)的主體)即可。

注意,傳遞給構(gòu)造函數(shù)Function()的參數(shù)中沒(méi)有一個(gè)用于說(shuō)明它要?jiǎng)?chuàng)建的函數(shù)名。用Function()構(gòu)造函數(shù)創(chuàng)建的未命名函數(shù)有時(shí)被成為“匿名函數(shù)”。

你可能非常想知道Function()構(gòu)造函數(shù)的用途是什么。為什么不能只用function語(yǔ)句來(lái)定義所有的函數(shù)呢?原因是Function()構(gòu)造函數(shù)允許我們動(dòng)態(tài)地建立和編譯一個(gè)函數(shù),它不會(huì)將我們限制在function語(yǔ)句預(yù)編譯的函數(shù)體中。這樣做帶來(lái)的負(fù)面影響效應(yīng)就是每次調(diào)用一個(gè)函數(shù)時(shí),F(xiàn)unction()構(gòu)造函數(shù)都要對(duì)它進(jìn)行編譯。因此,在循環(huán)體中或者在經(jīng)常使用的函數(shù)中,我們不應(yīng)該頻繁地調(diào)用這個(gè)構(gòu)造函數(shù)。

使用Function()構(gòu)造函數(shù)的另一個(gè)原因是它能夠?qū)⒑瘮?shù)定義為JavaScript表達(dá)式的一部分,而不是將其定義一個(gè)語(yǔ)句,這種情況下使用它就顯得比較的方面,甚至可以說(shuō)精致。

3:函數(shù)直接量
函數(shù)直接量是一個(gè)表達(dá)式,它可以定義匿名函數(shù)。函數(shù)直接量的語(yǔ)法和function語(yǔ)句非常相似,只不過(guò)它被用作表達(dá)式,而不是用作語(yǔ)句,而且也無(wú)需指定函數(shù)名。下面的三行代碼分別使用function()語(yǔ)句、Funciont()構(gòu)造函數(shù)和函數(shù)直接量定義了三個(gè)基本上相同的函數(shù):

function f(x){return x*x};
var f=new Function("x","return x*x;");
var f=function(x){reurn x*x};

雖然函數(shù)直接量創(chuàng)建的是未命名函數(shù),但是它的語(yǔ)法也規(guī)定它可以指定函數(shù)名,這在編寫(xiě)調(diào)用自身的遞歸函數(shù)時(shí)非常有用。例如:
var f=function fact(x){if(x<=1)return 1;else return x*fact(x-1);};
上面的代碼定義了一個(gè)未命名函數(shù),并對(duì)它的引用存儲(chǔ)在變量f中。它并沒(méi)有真正的創(chuàng)建一個(gè)名為fact()的函數(shù),只是允許函數(shù)體用這個(gè)名字來(lái)引用自身。但是要注意,JavaScript1.5之前的版本中沒(méi)有正確實(shí)現(xiàn)這種命名的函數(shù)直接量。

函數(shù)直接量的用法和用Function()構(gòu)造函數(shù)創(chuàng)建函數(shù)的方法非常相似。由于它們都是由JavaScript的表達(dá)式創(chuàng)建的,而不是由語(yǔ)句創(chuàng)建的,所以使用它們的方式也就更加靈活,尤其適用于那些只使用一次,而且無(wú)需命名的函數(shù)。例如,一個(gè)使用函數(shù)直接量表達(dá)式指定的函數(shù)可以存儲(chǔ)在一個(gè)變量中、傳遞給其他的函數(shù)甚至被直接調(diào)用:

a[0]=function(x){return x*x;};//定義一個(gè)函數(shù)并保存它
a.sort(function(a,b){return a-b;});//定義一個(gè)函數(shù);把它傳遞給另一個(gè)函數(shù)
var tensquared=(function(x){return x*x;})(10);

和Function()構(gòu)造函數(shù)一樣,函數(shù)直接量創(chuàng)建的是未命名函數(shù),而且不會(huì)自動(dòng)地將這個(gè)函數(shù)存儲(chǔ)在屬性中。但是,比起Function()構(gòu)造函數(shù)來(lái)說(shuō),函數(shù)直接量有一個(gè)重要的優(yōu)點(diǎn)。由Function()構(gòu)造函數(shù)創(chuàng)建的函數(shù)的主體必須用一個(gè)字符串說(shuō)明,用這種方式來(lái)表達(dá)一個(gè)長(zhǎng)而復(fù)雜的函數(shù)是狠笨拙的。但是函數(shù)直接量的主體使用的卻是標(biāo)準(zhǔn)的JavaScript語(yǔ)法。而且函數(shù)直接量只被解析一次,而作為字符串傳遞給Function()構(gòu)造函數(shù)的 JavaScript代碼則在每次調(diào)用構(gòu)造函數(shù)時(shí)只需被解析一次和編譯一次。

在JavaScript1.1中,可以使用構(gòu)造函數(shù)Function()來(lái)定義函數(shù),在JavaScript1.2和其后的版本中,還可以使用函數(shù)直接量來(lái)構(gòu)造函數(shù)。你應(yīng)該注意這兩種方法之間的重要差別。

首先,構(gòu)造函數(shù)Function()允許在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建和編譯JavaScript代碼。但是函數(shù)直接量卻是函數(shù)結(jié)構(gòu)的一個(gè)靜態(tài)部分,就像function語(yǔ)句一樣。

其次,作為第一個(gè)差別的必然結(jié)果,每次調(diào)用構(gòu)造函數(shù)Function()時(shí)都會(huì)解析函數(shù)體并且創(chuàng)建一個(gè)新東漢數(shù)對(duì)象。如果對(duì)構(gòu)造函數(shù)的調(diào)用出現(xiàn)在一個(gè)循環(huán)中,或者出現(xiàn)在一個(gè)經(jīng)常被調(diào)用的函數(shù)中,這種方法的效率非常低。另一個(gè)方面,函數(shù)直接量或出現(xiàn)在循環(huán)和函數(shù)中的嵌套函數(shù)不是在每次調(diào)用時(shí)都被重新編譯,而且每當(dāng)遇到一個(gè)函數(shù)直接量時(shí)也不創(chuàng)建一個(gè)新的函數(shù)對(duì)象。

Function()構(gòu)造函數(shù)和函數(shù)之間量之間的第三點(diǎn)差別是,使用構(gòu)造函數(shù)Function()創(chuàng)建的函數(shù)不使用詞法作用域,相反的,它們總是被當(dāng)作頂級(jí)函數(shù)來(lái)編譯,就像下面代碼所說(shuō)明的那樣:

var y="global";
function constructFunction()
{
var y="local";
return new Function("return y");//不捕捉局部作用域。
}
//這行代碼將顯示"global",因?yàn)镕unction()構(gòu)造函數(shù)返回的函數(shù)并不使用局部作用域。
//假如使用一個(gè)函數(shù)直接量,這行代碼則可能顯示"local"。
alert(constructFunction());

相關(guān)文章

  • JavaScript cookie與session的使用及區(qū)別深入探究

    JavaScript cookie與session的使用及區(qū)別深入探究

    這篇文章主要介紹了Java中Cookie和Session詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-10-10
  • JS SetInterval 代碼實(shí)現(xiàn)頁(yè)面輪詢

    JS SetInterval 代碼實(shí)現(xiàn)頁(yè)面輪詢

    setInterval 是一個(gè)實(shí)現(xiàn)定時(shí)調(diào)用的函數(shù),可按照指定的周期(以毫秒計(jì))來(lái)調(diào)用函數(shù)或計(jì)算表達(dá)式。下面通過(guò)本文給大家分享JS SetInterval 代碼實(shí)現(xiàn)頁(yè)面輪詢,感興趣的朋友一起看看吧
    2017-08-08
  • weUI應(yīng)用之JS常用信息提示彈層的封裝

    weUI應(yīng)用之JS常用信息提示彈層的封裝

    這篇文章主要為大家詳細(xì)介紹了weUI應(yīng)用中利用JS封裝幾個(gè)常用的信息提示彈層的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 深入認(rèn)識(shí)javascript中的eval函數(shù)

    深入認(rèn)識(shí)javascript中的eval函數(shù)

    發(fā)現(xiàn)為本文起一個(gè)合適的標(biāo)題還不是那么容易,呵呵,所以在此先說(shuō)明下本文的兩個(gè)目的.
    2009-11-11
  • 瀏覽器的JavaScript引擎的識(shí)別方法

    瀏覽器的JavaScript引擎的識(shí)別方法

    識(shí)別瀏覽器的JavaScript引擎的方法對(duì)PC瀏覽器和移動(dòng)瀏覽器都可用,其實(shí)實(shí)現(xiàn)原理就是下面的這段js,感興趣的朋友可以參考下
    2013-10-10
  • JavaScript檢測(cè)用戶是否在線的6種方法總結(jié)

    JavaScript檢測(cè)用戶是否在線的6種方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了JavaScript中實(shí)現(xiàn)檢測(cè)用戶是否在線的6種常用方法,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • NestJs 靜態(tài)目錄配置詳解

    NestJs 靜態(tài)目錄配置詳解

    這篇文章主要介紹了NestJs 靜態(tài)目錄配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • javascript實(shí)現(xiàn)的白板效果(可以直接在網(wǎng)頁(yè)上寫(xiě)字)

    javascript實(shí)現(xiàn)的白板效果(可以直接在網(wǎng)頁(yè)上寫(xiě)字)

    javascript動(dòng)畫(huà)系列之網(wǎng)頁(yè)白板 javascript實(shí)現(xiàn)的白板(兼容ff,ie,chrome,……)
    2010-07-07
  • JScript中的undefined和"undefined"的區(qū)別

    JScript中的undefined和"undefined"的區(qū)別

    JScript中的undefined和"undefined"的區(qū)別...
    2007-03-03
  • Js中async/await的執(zhí)行順序詳解

    Js中async/await的執(zhí)行順序詳解

    隨著async/await正式納入ES7標(biāo)準(zhǔn),越來(lái)越多的人開(kāi)始研究據(jù)說(shuō)是異步編程終級(jí)解決方案的 async/await。下面這篇文章主要給大家介紹了關(guān)于Js中async/await執(zhí)行順序的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09

最新評(píng)論