熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JS特殊函數(Function()構造函數、函數直接量)區別

2013-11-15 12:01:06  來源: JSP教程 

  函數定義

  函數是由這樣的方式進行聲明的關鍵字 function函數名一組參數以及置於括號中的待執行代碼

  函數的構造語法有這三種

  Js代碼

  代碼如下:

  function functionName(arg arg argN) { statements }//function語句

  var function_name = new Function(arg arg argN function_body);//Function()構造函數

  var func = function(arg arg argN) { statements };//函數直接量

  示例

  Js代碼

  代碼如下:

  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(arg arg argN function_body)

  在上面的形式中每個 arg 都是一個參數最後一個參數是函數主體(要執行的代碼)這些參數必須是字符串

  var sayHi = new Function("sName" "sMessage" "alert(Hello + sName + sMessage);");

  sayHi("jzj" "你好!");//Hello jzj你好!

  函數名只是指向函數的變量那麼可以把函數作為參數傳遞給另一個函數嗎?答案是可以的請看

  Js代碼

  復制代碼 代碼如下:

  function callAnotherFunc(fnFunction vArgument) {

  fnFunction(vArgument);

  }

  var doAdd = new Function("iNum" "alert(iNum + )");

  callAnotherFunc(doAdd ); //輸出 ""

  注意盡管可以使用 Function 構造函數創建函數但最好不要使用它因為用它定義函數比用傳統方式要慢得多不過所有函數都應看作 Function 類的實例

  如果你定義的函數沒有參數那麼可以只需給構造函數傳遞一個字符串(即函數的主體)即可

  注意傳遞給構造函數Function()的參數中沒有一個用於說明它要創建的函數名用Function()構造函數創建的未命名函數有時被稱為“匿名函數”

  Function()函數允許我們動態地建立和編譯一個函數它不會將我們限制在function語句預編譯的函數體中

  函數直接量

  函數直接量是一個表達式它可以定義匿名函數函數直接量的語法和function語句非常相似只不過它被用作表達式而不是用作語句而且也無需指定函數名語法

  Js代碼

  代碼如下:

  var func = function(arg arg argN) { statements };//函數直接量

  雖然函數直接量創建的是未命名函數但是它的語法也規定它可以指定函數名這在編寫調用自身的遞歸函數時非常有用例如

  Js代碼

  代碼如下:

  var f = function fact(x) {

  if (x <= ) {

  return ;

  } else {

  return x * fact(x );

  }

  };

  注它並沒有真正創建一個名為fact()函數只是允許函數體用這個名字來引用自身JavaScript之前的版本中沒有正確實現這種命名的函數直接量

  •函數引用

  函數名並沒有什麼實質意義它不過是用來保存函數的變量名字可以將這個函數賦給其他變量它仍然會以相同方式起作用

  Js代碼

  代碼如下:

  function square(x){return x*x;}

  var a = square;

  var b = a();//b 為

  這有點像C++中的函數指針了

  Function()構造函數和函數直接量差別

  Function()構造函數和函數直接量之間的差別有一點就是使用構造函數Function()創建的函數不使用詞法作用域相反的它們總是被頂級函數來編譯

  Js代碼

  代碼如下:

  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()());


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20095.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.