JS中創(chuàng)建函數(shù)的三種方式及區(qū)別
來源:易賢網(wǎng) 閱讀:548 次 日期:2016-07-20 15:39:20
溫馨提示:易賢網(wǎng)小編為您整理了“JS中創(chuàng)建函數(shù)的三種方式及區(qū)別”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了js函數(shù)的多種定義方法與其區(qū)別,非常的詳細(xì),有需要的小伙伴可以參考下

1.函數(shù)聲明

function sum1(n1,n2){

    return n1+n2;

  };

2.函數(shù)表達(dá)式,又叫函數(shù)字面量

var sum2=function(n1,n2){

    return n1+n2;

};

兩者的區(qū)別:解析器會先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可以訪問;而函數(shù)表達(dá)式則必須等到解析器執(zhí)行到它所在的代碼行才會真正被解釋執(zhí)行。

自執(zhí)行函數(shù)嚴(yán)格來說也叫函數(shù)表達(dá)式,它主要用于創(chuàng)建一個新的作用域,在此作用域內(nèi)聲明的變量,不會和其它作用域內(nèi)的變量沖突或混淆,大多是以匿名函數(shù)方式存在,且立即自動執(zhí)行。

(function(n1,n2){

    console.log (n1+n2)

})(1,3);//4

另外幾種自執(zhí)行函數(shù):

//可用來傳參

(function(x,y){

  console.log(x+y);

})(2,3);

//帶返回值

var sum=(function(x,y){

  return x+y;

})(2,3);

console.log(sum);

~function(){

  var name='~'

  console.log(name);

}();

!function(){

  var name='!'

  console.log(name);

}();

;(function(){

  var name=';'

  console.log(name);

})();

-function(){

  var name='-'

  console.log(name);

}();

//逗號運(yùn)算符

1,function(){

  var name=',';

  console.log(name);

}();

//異或

1^function(){

  var name='^';

  console.log(name);

}();

//比較運(yùn)算符

1>function(){

  var name='>';

  console.log(name);

}();

~+-!(function(){

  var name='~+-!';

  console.log(name);

})();

~!(function(){

  var name='~!';

  console.log(name);

})();

(function(){

  var name='call';

  console.log(name);

}).call();

(function(){

  var name='apply';

  console.log(name);

}).apply();

3.函數(shù)構(gòu)造法,參數(shù)必須加引號

var sum3=new Function('n1','n2','return n1+n2');

console.log(sum3(2,3));//5

從技術(shù)角度講,這是一個函數(shù)表達(dá)式。一般不推薦用這種方法定義函數(shù),因為這種語法會導(dǎo)致解析兩次代碼(第一次是解析常規(guī)ECMAScript代碼,第二次是解析傳入構(gòu)造函數(shù)中的字符串),從而影響性能。

var name='haoxl';

  function fun(){

    var name='lili';

    return new Function('return name');//不能獲取局部變量

  }

 console.log(fun()());//haoxl

Function()構(gòu)造函數(shù)每次執(zhí)行時都會解析函數(shù)主體,并創(chuàng)建一個新的函數(shù)對象,所以當(dāng)在一個循環(huán)或頻繁執(zhí)行的函數(shù)中調(diào)用Function()構(gòu)造函數(shù)效率是非常低的。而函數(shù)字面量卻不是每次遇到都會重新編譯的,用Function()構(gòu)造函數(shù)創(chuàng)建一個函數(shù)時并不遵循典型的作用域,它一直把它當(dāng)作是頂級函數(shù)來執(zhí)行。

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JS中創(chuàng)建函數(shù)的三種方式及區(qū)別
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)