JS特殊函数(Function()构造函数、函数直接量)区别介绍
JS 函数 介绍 区别 直接 Function 特殊 构造函数
2023-06-13 09:14:54 时间
函数定义
函数是由这样的方式进行声明的:关键字function、函数名、一组参数,以及置于括号中的待执行代码。
函数的构造语法有这三种:
Js代码
复制代码代码如下:
函数是由这样的方式进行声明的:关键字function、函数名、一组参数,以及置于括号中的待执行代码。
函数的构造语法有这三种:
Js代码
1.functionfunctionName(arg0,arg1,...argN){statements}//function语句
2.varfunction_name=newFunction(arg1,arg2,...,argN,function_body);//Function()构造函数
3.varfunc=function(arg0,arg1,...argN){statements};//函数直接量
示例:
Js代码
1.functionf(x){returnx*x};//function语句
2.varf=newFunction("x","returnx*x;");//Function()构造函数
3.varf=function(x){returnx*x;};//函数直接量
如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是undefined。
Function()构造函数
函数实际上是功能完整的对象。Function类可以表示开发者定义的任何函数。用Function类直接创建函数的语法如下:
varfunction_name=newfunction(arg1,arg2,...,argN,function_body)
在上面的形式中,每个arg都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。
varsayHi=newFunction("sName","sMessage","alert("Hello"+sName+sMessage);");
sayHi("jzj,","你好!");//Hellojzj,你好!
函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数吗?答案是可以的,请看:
Js代码
functioncallAnotherFunc(fnFunction,vArgument){
fnFunction(vArgument);
}
vardoAdd=newFunction("iNum","alert(iNum+10)");
callAnotherFunc(doAdd,10);//输出"20"
注意:尽管可以使用Function构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作Function类的实例。
如果你定义的函数没有参数,那么可以只需给构造函数传递一个字符串(即函数的主体)即可。
注意:传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名。用Function()构造函数创建的未命名函数有时被称为“匿名函数”。
Function()函数允许我们动态地建立和编译一个函数,它不会将我们限制在function语句预编译的函数体中。
函数直接量
函数直接量是一个表达式,它可以定义匿名函数。函数直接量的语法和function语句非常相似,只不过它被用作表达式,而不是用作语句,而且也无需指定函数名。语法:
Js代码
varfunc=function(arg0,arg1,...argN){statements};//函数直接量
虽然函数直接量创建的是未命名函数,但是它的语法也规定它可以指定函数名,这在编写调用自身的递归函数时非常有用,例如:
Js代码
varf=functionfact(x){
if(x<=1){
return1;
}else{
returnx*fact(x-1);
}
};
注:它并没有真正创建一个名为fact()函数,只是允许函数体用这个名字来引用自身。JavaScript1.5之前的版本中没有正确实现这种命名的函数直接量。
•函数引用
函数名并没有什么实质意义,它不过是用来保存函数的变量名字,可以将这个函数赋给其他变量,它仍然会以相同方式起作用:
Js代码
functionsquare(x){returnx*x;}
vara=square;
varb=a(5);//b为25
这有点像C++中的函数指针了。
Function()构造函数和函数直接量差别
Function()构造函数和函数直接量之间的差别有一点就是:使用构造函数Function()创建的函数不使用词法作用域,相反的,它们总是被顶级函数来编译,如:
Js代码
vary="global";
functionconstructFunction(){
vary="local";
//Function()构造函数
returnnewFunction("returny;");//不使用局部作用域
}
functionconstFunction(){
vary="local";
//函数直接量
varf=function(){
returny;//使用局部作用域
};
returnf;
}
//显示global,因为Function()构造函数返回的函数并不使用局部作用域
alert(constructFunction()());
//显示lobal,因为函数直接量返回的函数并使用局部作用域
alert(constFunction()());
相关文章
- js实现发布订阅模式
- H.265视频流媒体播放器EasyPlayer.JS如何获取时间戳回调?
- JS函数无限柯里化
- JS学习笔记 (五) 函数进阶
- js分类刷leetcode动态规划
- 【Node.js】全局可用变量、函数和对象
- ThinkJS 3 正式版发布,Node.js Web 框架详解编程语言
- Node.js中的Buffer对象详解编程语言
- JS arguments.callee属性:获取当前所在的函数
- JSON和JS对象的相互转换
- 妙用JS获取Oracle信息的快速方法(js获取Oracle)
- 如何实现JS函数的重载
- javascript(js)join函数使用方法介绍
- JS常用校验函数
- 犀利的js函数集合
- js日期转换成中文格式的函数
- 百度留言本js大家可以参考下
- js获取图片大小的函数代码
- Js时间间隔计算的函数(间隔天数)
- 远离JS灾难css灾难之js私有函数和css选择器作为容器
- 利用jquery的获取JS文件中的字符串内容
- JS获取浏览器版本及名称实现函数
- js函数setTimeout延迟执行的简单介绍
- 页面载入结束自动调用js函数示例
- js编写trim()函数及正则表达式的运用
- Js参数值中含有单引号或双引号问题的解决方法
- js剪切板的用法(clipboardData.setData)与jsmatch函数介绍
- js中split函数的使用方法说明
- 利用js正则表达式验证手机号,email地址,邮政编码
- js函数模拟显示桌面.scf程序示例
- js检测输入内容全为空格的方法
- Js+Jq获取URL参数的集中方法示例代码
- JS中使用Array函数shift和pop创建可忽略参数的例子
- js的[defer]和[async]属性
- node.js中的fs.chownSync方法使用说明
- JS实现页面超时后自动跳转到登陆页面