JS中建立函數的三種方式及區別,js三種方式
1.函式宣告
function sum1(n1,n2){ return n1+n2; };
2.函數運算式,又叫函數字面量
var sum2=function(n1,n2){ return n1+n2;};
兩者的區別:解析器會先讀取函式宣告,並使其在執行任何代碼之前可以訪問;而函數運算式則必須等到解析器執行到它所在的程式碼才會真正被解釋執行。
自執行函數嚴格來說也叫函數運算式,它主要用於建立一個新的範圍,在此範圍內聲明的變數,不會和其它範圍內的變數衝突或混淆,大多是以匿名函數方式存在,且立即自動執行。
(function(n1,n2){ console.log (n1+n2)})(1,3);//4
另外幾種自執行函數:
//可用來傳參 (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); }(); //逗號運算子 1,function(){ var name=','; console.log(name); }(); //異或 1^function(){ var name='^'; console.log(name); }(); //比較子 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.函數構造法,參數必須加引號
var sum3=new Function('n1','n2','return n1+n2');console.log(sum3(2,3));//5
從技術角度講,這是一個函數運算式。一般不推薦用這種方法定義函數,因為這種文法會導致解析兩次代碼(第一次是解析常規ECMAScript代碼,第二次是解析傳入建構函式中的字串),從而影響效能。
var name='haoxl'; function fun(){ var name='lili'; return new Function('return name');//不能擷取局部變數 } console.log(fun()());//haoxl
Function()建構函式每次執行時都會解析函數主體,並建立一個新的函數對象,所以當在一個迴圈或頻繁執行的函數中調用Function()建構函式效率是非常低的。而函數字面量卻不是每次遇到都會重新編譯的,用Function()建構函式建立一個函數時並不遵循典型的範圍,它一直把它當作是頂級函數來執行。
您可能感興趣的文章:
- 一組JS建立和動作表格的函數集合
- javascript的函數、建立對象、封裝、屬性和方法、繼承
- JS中使用Array函數shift和pop建立可忽略參數的例子
- js中匿名函數的建立與調用方法分析
- javascript建立函數的20種方式匯總