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

比較常見的javascript中定義函數(shù)的區(qū)別

 更新時間:2015年11月09日 14:15:45   投稿:mrr  
js定義函數(shù)有好多種,但是他們之間的區(qū)別,大家都了解嗎,接下來,小編通過本文給大家介紹比較常見的js中定義函數(shù)的區(qū)別,對本文感興趣的朋友一起看看吧

比較常見的javascript中定義函數(shù)的區(qū)別主要通過以下三個方面給大家講解,需要的朋友參考下吧

1:調(diào)用關(guān)鍵字function來構(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)建了一個新函數(shù),該函數(shù)和你所熟悉的語法定義的函數(shù)基本上時等價(jià)的:

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

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

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

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

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

3:函數(shù)直接量

  函數(shù)直接量是一個表達(dá)式,它可以定義匿名函數(shù)。函數(shù)直接量的語法和function語句非常相似,只不過它被用作表達(dá)式,而不是用作語句,而且也無需指定函數(shù)名。下面的三行代碼分別使用function()語句、Funciont()構(gòu)造函數(shù)和函數(shù)直接量定義了三個基本上相同的函數(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ù),但是它的語法也規(guī)定它可以指定函數(shù)名,這在編寫調(diào)用自身的遞歸函數(shù)時非常有用。

  例如:

var f=function fact(x){if(x<=1)return 1;else return x*fact(x-1);}; 

  上面的代碼定義了一個未命名函數(shù),并對它的引用存儲在變量f中。它并沒有真正的創(chuàng)建一個名為fact()的函數(shù),只是允許函數(shù)體用這個名字來引用自身。但是要注意,JavaScript1.5之前的版本中沒有正確實(shí)現(xiàn)這種命名的函數(shù)直接量。

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

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

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

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

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

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

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

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

相關(guān)文章

  • JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式區(qū)別淺析

    JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式區(qū)別淺析

    這篇文章主要介紹了JavaScript中的函數(shù)聲明和函數(shù)表達(dá)式區(qū)別淺析,本文總結(jié)的淺顯易懂,非常好的一篇技術(shù)文章,需要的朋友可以參考下
    2015-03-03
  • javascript:void(0)使用探討

    javascript:void(0)使用探討

    如果想做一個鏈接點(diǎn)擊后不做任何事情,或者響應(yīng)點(diǎn)擊而完成其他事情一般都是設(shè)置屬性href = "#"其實(shí)還有比這更好的方法,下面為大家整理了幾種比較常見的解決方法,感興趣的朋友可以參考下
    2013-08-08
  • javascript,jquery閉包概念分析

    javascript,jquery閉包概念分析

    偶爾聽人說javascript閉包,讓我聯(lián)想起以前學(xué)編譯原理和數(shù)字邏輯里講的閉包,以前上課講的閉包很難懂,而且含有遞歸的意思在里面,現(xiàn)在不想再查看里面的閉包概念。
    2010-06-06
  • JavaScript中的this關(guān)鍵詞指向

    JavaScript中的this關(guān)鍵詞指向

    本文介紹了JavaScript中的this關(guān)鍵詞指向,this是JavaScript的一個關(guān)鍵字,他是函數(shù)執(zhí)行過程中,自動生成的一個內(nèi)部對象,指當(dāng)前的對象,只在當(dāng)前函數(shù)內(nèi)部使用,更多相關(guān)資料需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • Spring Boot根據(jù)配置暴露接口的代碼實(shí)現(xiàn)

    Spring Boot根據(jù)配置暴露接口的代碼實(shí)現(xiàn)

    SpringBoot 在 org.springframework.boot.autoconfigure.condition 包下提供了很多 ConditionalOnXxx 格式的條件注解,這些類名起的非常好,很直觀的可以理解其功能,本示例要實(shí)現(xiàn)的效果:在非生產(chǎn)環(huán)境下暴露測試用的接口,需要的朋友可以參考下
    2024-11-11
  • 淺析JavaScript中的隱式類型轉(zhuǎn)換

    淺析JavaScript中的隱式類型轉(zhuǎn)換

    這篇文章主要是對JavaScript中的隱式類型轉(zhuǎn)換進(jìn)行了詳細(xì)分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 前端常見的兩種pc適配方案介紹

    前端常見的兩種pc適配方案介紹

    這篇文章主要介紹了前端常見的兩種pc適配方案的相關(guān)資料,在PC端自適應(yīng)設(shè)計(jì)通過優(yōu)化用戶體驗(yàn)和提高網(wǎng)站適配性,確保了電商網(wǎng)站、企業(yè)官網(wǎng)和在線教育平臺等多種場景下內(nèi)容的清晰展示和流暢操作,需要的朋友可以參考下
    2024-10-10
  • 你不知道的高性能JAVASCRIPT

    你不知道的高性能JAVASCRIPT

    想必大家都知道,JavaScrip是全棧開發(fā)語言,瀏覽器,手機(jī),服務(wù)器端都可以看到JS的身影。 本文會分享一些高效的JavaScript的最佳實(shí)踐,提高大家對JS的底層和實(shí)現(xiàn)原理的理解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Javascript里使用Dom操作Xml

    Javascript里使用Dom操作Xml

    Javascript里使用Dom操作Xml...
    2006-09-09
  • 定單管理上 JS表格排序

    定單管理上 JS表格排序

    定單管理上 JS表格排序...
    2006-10-10

最新評論

瑞丽市| 四子王旗| 娱乐| 商水县| 剑川县| 哈密市| 平塘县| 斗六市| 密云县| 惠水县| 越西县| 陆丰市| 吴旗县| 丹巴县| 柳江县| 潢川县| 南川市| 新宁县| 洪湖市| 大渡口区| 仲巴县| 廉江市| 昭平县| 衡东县| 萍乡市| 卫辉市| 朝阳市| 关岭| 剑河县| 汝城县| 洛浦县| 临江市| 当雄县| 郁南县| 德保县| 石狮市| 德昌县| 乌拉特前旗| 揭阳市| 寿阳县| 新兴县|