知识大全 JS特殊函数(Function()构造函数、函数直接量)区别

Posted 函数

篇首语:无私是稀有的道德,因为从它身上是无利可图的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JS特殊函数(Function()构造函数、函数直接量)区别相关的知识,希望对你有一定的参考价值。

JS特殊函数(Function()构造函数、函数直接量)区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  函数定义

  函数是由这样的方式进行声明的 关键字 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 因为函数直接量返回的函数并使用局部作用域

cha138/Article/program/Java/JSP/201311/20095

相关参考

知识大全 构造函数和析构函数

  类构造函数  本节将讨论三种类构造函数  类构造函数的类型  注释  实例  用于创建并初始化类的实例  私有  在类之外不可访问的特殊类型实例构造函数无法用私有构造函数来实例化类  静态  在创

知识大全 构造和析构成员函数

    类有一个特殊的成员函数叫做构造成员函数它通常用于初始化类的数据成员在创建对象时会自动调用类的构造成员函数Java中的构造成员函数必须与该类具有相同的名字另外构造成员函数一般都应用public类

知识大全 如何正确实现PHP function函数扩展

如何正确实现PHPfunction函数扩展  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们在这篇

知识大全 编写类String 的构造函数、析构函数和赋值函数

编写类String的构造函数、析构函数和赋值函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!已知

知识大全 privte的析构函数和构造函数

  C++中是不允许virtual构造函数的如果在构造函数前加virtual  以vc为例编译器报错为inlineistheonlylegalstorageclassforconstructors  

知识大全 C#中构造函数和析构函数的用法(一)

C#中构造函数和析构函数的用法(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要  构造

知识大全 C#中构造函数和析构函数的用法(二)

C#中构造函数和析构函数的用法(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  声明了一个类

知识大全 C#中构造函数和析构函数的用法(三)

C#中构造函数和析构函数的用法(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Bb=new

知识大全 查找 - 散列技术 - 散列函数的构造方法

  散列函数的构造方法  散列函数的选择有两条标准简单和均匀  简单指散列函数的计算简单快速;  均匀指对于关键字集合中的任一关键字散列函数能以等概率将其映射到表空间的任何一个位置上也就是说散列函数能

知识大全 C#默认构造函数的作用

C#默认构造函数的作用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  构造函数主要用来初始化对象