<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • javascript中定義函數(shù)的區(qū)別

    時間:2024-06-07 12:01:09 JavaScript 我要投稿
    • 相關(guān)推薦

    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ù)基本上時等價的:

      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ù)都要對它進行編譯。因此,在循環(huán)體中或者在經(jīng)常使用的函數(shù)中,我們不應(yīng)該頻繁地調(diào)用這個構(gòu)造函數(shù)。

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

      3:函數(shù)直接量

      函數(shù)直接量是一個表達式,它可以定義匿名函數(shù)。函數(shù)直接量的語法和function語句非常相似,只不過它被用作表達式,而不是用作語句,而且也無需指定函數(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之前的版本中沒有正確實現(xiàn)這種命名的函數(shù)直接量。

      函數(shù)直接量的用法和用Function()構(gòu)造函數(shù)創(chuàng)建函數(shù)的方法非常相似。由于它們都是由JavaScript的表達式創(chuàng)建的,而不是由語句創(chuàng)建的,所以使用它們的方式也就更加靈活,尤其適用于那些只使用一次,而且無需命名的函數(shù)。例如,一個使用函數(shù)直接量表達式指定的函數(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)點。由Function()構(gòu)造函數(shù)創(chuàng)建的函數(shù)的主體必須用一個字符串說明,用這種方式來表達一個長而復(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()允許在運行時動態(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ù)之間量之間的第三點差別是,使用構(gòu)造函數(shù)Function()創(chuàng)建的函數(shù)不使用詞法作用域,相反的,它們總是被當(dāng)作頂級函數(shù)來編譯,就像下面代碼所說明的那樣:

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

      

    【javascript中定義函數(shù)的區(qū)別】相關(guān)文章:

    Javascript函數(shù)的定義和用法分析08-15

    JavaScript中push(),join() 函數(shù)實例詳解09-05

    JavaScript類定義原型方法的兩種實現(xiàn)的區(qū)別07-11

    PHP中的排序函數(shù)區(qū)別分析08-23

    淺析jQuery 遍歷函數(shù)javascript08-06

    javascript閉包的定義及應(yīng)用實例分析08-25

    最常用的20個javascript方法函數(shù)09-10

    JavaScript日期時間格式化函數(shù)08-29

    JavaScript中的with關(guān)鍵字07-24

    在Java中執(zhí)行JavaScript代碼07-14

    主站蜘蛛池模板: 国产91精品黄网在线观看| 久久夜色精品国产www| 国产精品片在线观看手机版| 亚洲精品乱码久久久久久自慰| 国产亚洲精品xxx| 亚洲欧洲成人精品香蕉网| 91精品国产色综久久| 国产网红无码精品视频| 亚洲精品乱码久久久久久不卡| 国产成人精品视频2021| 国产精品视频分类一区| 少妇人妻无码精品视频app| 蜜臀精品无码AV在线播放| 99在线精品免费视频| 奇米影视7777久久精品| 日韩精品一区二区三区视频| 国产精品JIZZ在线观看老狼| 99精品久久精品| 岛国精品一区免费视频在线观看| 一本一本久久a久久综合精品蜜桃| 精品成人一区二区三区四区| 亚洲永久永久永久永久永久精品| 2021久久精品国产99国产精品| 无码人妻精品一区二区三区久久| 日韩精品欧美亚洲| 精品91自产拍在线观看二区| 国产精品久久久久乳精品爆| 秋霞午夜鲁丝片午夜精品久| 国产成人精品综合网站| 国产精品成熟老女人视频| 麻豆aⅴ精品无码一区二区| 亚洲国产精品无码AAA片| 中文精品无码中文字幕无码专区| 青草青草久热精品视频在线观看| 国内精品欧美久久精品| 国产精品人人做人人爽| 99国产精品私拍pans大尺度| 99精品久久久久久久婷婷| 国产精品区AV一区二区| 精品国产亚洲男女在线线电影| 精品国产一区二区三区久久蜜臀|