JS特殊函数(Function()构造函数、函数直接量)区别介绍


Posted in Javascript onMay 19, 2013

函数定义
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。
函数的构造语法有这三种:
Js代码

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 };//函数直接量

示例:
Js代码
1.function f(x){return x*x};//function语句 
2.var f = new Function("x","return x*x;");//Function()构造函数 
3.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,你好!
函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数吗?答案是可以的,请看:
Js代码

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语句非常相似,只不过它被用作表达式,而不是用作语句,而且也无需指定函数名。语法:
Js代码
var func = function(arg0, arg1, ... argN) { statements };//函数直接量

虽然函数直接量创建的是未命名函数,但是它的语法也规定它可以指定函数名,这在编写调用自身的递归函数时非常有用,例如:
Js代码
var f = function fact(x) { 
if (x <= 1) { 
return 1; 
} else { 
return x * fact(x - 1); 
} 
};

注:它并没有真正创建一个名为fact()函数,只是允许函数体用这个名字来引用自身。JavaScript1.5之前的版本中没有正确实现这种命名的函数直接量。
函数引用
函数名并没有什么实质意义,它不过是用来保存函数的变量名字,可以将这个函数赋给其他变量,它仍然会以相同方式起作用:
Js代码
function square(x){return x*x;} 
var a = square; 
var b = a(5);//b 为25

这有点像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()());
Javascript 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
Mar 14 Javascript
jQuery里filter()函数与find()函数用法分析
Jun 24 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
Aug 27 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
May 19 #Javascript
js函数中onmousedown和onclick的区别和联系探讨
May 19 #Javascript
下拉菜单点击实现连接跳转功能的js代码
May 19 #Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 #Javascript
固定背景实现的背景滚动特效示例分享
May 19 #Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 #Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 #Javascript
You might like
3
2006/10/09 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
收集json解析的四种方法分享
2014/01/17 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
村官工作鉴定评语
2014/01/27 职场文书
辅导员评语
2014/05/04 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2014年党务工作总结
2014/11/25 职场文书
大连导游词
2015/02/12 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
python中的random模块和相关函数详解
2022/04/22 Python