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实现统计复选框选中数量
Nov 24 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
Aug 24 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
任意Json转成无序列表的方法示例
Dec 09 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 jQuery
vue mint-ui tabbar变组件使用
May 04 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
Vue内部渲染视图的方法
Sep 02 Javascript
vue+animation实现翻页动画
Jun 29 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
php 移除数组重复元素的一点说明
2008/11/27 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
javascript数组的使用
2013/03/28 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
JS实现留言板功能
2017/06/17 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
python使用pil生成缩略图的方法
2015/03/26 Python
python实现简易通讯录修改版
2018/03/13 Python
python递归函数绘制分形树的方法
2018/06/22 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
单位实习证明怎么写
2014/01/17 职场文书
颁奖晚会主持词
2014/03/25 职场文书
企业指导教师评语
2014/04/28 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
投诉书格式范本
2015/07/02 职场文书
心理学培训心得体会
2016/01/22 职场文书