JS特殊函數(Function()建構函式、函數直接量)區別介紹

來源:互聯網
上載者:User

標籤:

函數定義 
函數是由這樣的方式進行聲明的:關鍵字 function、函數名、一組參數,以及置於括弧中的待執行代碼。 
函數的構造文法有這三種: 

1.function functionName(arg0, arg1, ... argN) { statements }//function語句 2.var function_name = new Function(arg1, arg2, ..., argN, function_body);//Function()建構函式 3.var func = function(arg0, arg1, ... argN) { statements };//函數直接量 

樣本:

function f(x){return x*x};//function語句 var f = new Function("x","return x*x;");//Function()建構函式 var f = function(x){return x*x;};//函數直接量 

如果函數無明確的傳回值,或調用了沒有參數的 return 語句,那麼它真正返回的值是 undefined。

Function()建構函式 

函數實際上是功能完整的對象 。Function類可以表示開發人員定義的任何函數。用Function類直接建立函數的文法如下: 
var function_name = new function(arg1, arg2, ..., argN, function_body) 
在上面的形式中,每個 arg 都是一個參數,最後一個參數是函數主體(要執行的代碼)。這些參數必須是字串。 
var sayHi = new Function("sName", "sMessage", "alert(‘Hello ‘ + sName + sMessage);"); 
sayHi("jzj,", "你好!");//Hello jzj,你好! 
函數名只是指向函數的變數,那麼可以把函數作為參數傳遞給另一個函數嗎?答案是可以的,請看: 

function callAnotherFunc(fnFunction, vArgument) { fnFunction(vArgument); } var doAdd = new Function("iNum", "alert(iNum + 10)"); callAnotherFunc(doAdd, 10); //輸出 "20" 

注意:儘管可以使用 Function 建構函式建立函數,但最好不要使用它,因為用它定義函數比用傳統方式要慢得多。不過,所有函數都應看作 Function 類的執行個體 。 
如果你定義的函數沒有參數,那麼可以只需給建構函式傳遞一個字串(即函數的主體)即可。 
注意:傳遞給建構函式Function()的參數中沒有一個用於說明它要建立的函數名。用Function()建構函式建立的未命名函數有時被稱為“匿名函數”。 
Function()函數允許我們動態地建立和編譯一個函數,它不會將我們限制在function語句先行編譯的函數體中。 

Function()建構函式和函數直接量差別 
Function()建構函式和函數直接量之間的差別有一點就是:使用建構函式Function()建立的函數不使用詞法範圍,相反的,它們總是被頂級函數來編譯,如: 

var y = "global"; function constructFunction() { var y = "local"; //Function()建構函式 return new Function("return y;");//不使用局部範圍 } function constFunction() { var y = "local"; //函數直接量 var f = function () { return y;//使用局部範圍 }; return f; } //顯示 global,因為Function()建構函式返回的函數並不使用局部範圍 alert(constructFunction()()); //顯示 lobal,因為函數直接量返回的函數並使用局部範圍 alert(constFunction()()); 

 

JS特殊函數(Function()建構函式、函數直接量)區別介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.