JavaScript高级程序设计读书笔记之八Function类及闭包
JavaScript 高级 Function 程序设计 闭包 读书笔记 类及 之八
2023-06-13 09:14:32 时间
Function类
定义
Function类可以表示开发者定义的任何函数,用Function类直接创建函数的语法如下:
varfunction_name=newFunction(agrument1,agrument2,...,argumentN,function_body);
每个argument都是一个参数,最后一个参数是函数主体(要执行的代码)。
示例:
复制代码代码如下:
定义
Function类可以表示开发者定义的任何函数,用Function类直接创建函数的语法如下:
varfunction_name=newFunction(agrument1,agrument2,...,argumentN,function_body);
每个argument都是一个参数,最后一个参数是函数主体(要执行的代码)。
示例:
functionsayHi(sName,sMessage){
alert("Hello"+sName+","+sMessage);
}
还可以如下定义它:
varsayHi=newFunction("sName","sMessage","alert(\"Hello\"+sName+\",\"+sMessage);");
注:尽管可用Function构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作是Function类的实例。
属性和方法
因为函数是引用类型,所以它们也有属性和方法,ECMAScript定义的属性length声明了函数期望的参数个数,例如:
functiondoAdd(iNum){
alert(iNum+10);
}
functionsayHi(){
alert("Hi");
}
alert(doAdd.length);//outpus1
alert(sayHi.length);//outpus0
Function对象也有与所有对象共享的标准valueOf()方法和toString()方法,这两个方法返回的都是函数的源代码,在调试时尤其有用。
例如:
functiondoAdd(iNum){
alert(iNum+10);
}
alert(doAdd.toString());
这段代码输出了doAdd()函数的文本。
闭包
定义
所谓闭包,是指词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。在ECMAScript中使用全局变量是一个简单的闭包实例。
示例:
varsMessage="HelloWorld";
functionsayHelloWold(){
alert(sMessage);
}
sayHelloWorld();
在一个函数中定义另一个函数会使闭包变得更复杂,如:
variBaseNum=10;
functionaddNumbers(iNum1,iNum2){
functiondoAddtion(){
returniNum1+iNum2+iBaseNum;
}
returndoAddtion();
}
这里函数addNumbers()包括函数doAddtion()(闭包)。内部函数是个闭包,因为它将获取外部函数的参数iNum1和iNum2以及全局变量iBaseNum的值。addNumbers()的最后一步调用了内部函数,把两个参数和全局变量相加,并返回它们的和。这里要掌握的重要概念是doAddtion()函数根本不接受参数,它使用的是从执行环境中获取的。
可以看到,闭包是ECMAScript中非常强大多用的一部分,可以用于执行复杂的计算。就像使用任何高级函数一样,在使用闭包时要当心,因为它们可能会变得非常复杂。
本文示例代码
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>《JavaScript高级程序设计》读书笔记之八:Function类及闭包</title>
<scripttype="text/javascript">
functiondoAdd(iNum){
alert(iNum+10);
}
functionsayHi(){
alert("Hi");
}
functionlengthProperty(){
alert(doAdd.length);
alert(sayHi.length);
}
functionvalueOfMethod(){
alert(doAdd.valueOf());
}
functiontoStringMethod(){
alert(doAdd.toString());
}
varsMessage="HelloWorld";
functionsayHelloWorld(){
alert(sMessage);
}
functiondemoOne(){
sayHelloWorld();
}
variBaseNum=10;
functionaddNumbers(iNum1,iNum2){
functiondoAddtion(){
returniNum1+iNum2+iBaseNum;
}
returndoAddtion();
}
functiondemoTwo(){
alert(addNumbers(1,2));
}
</script>
</head>
<body>
<h1>Length:</h1>
<inputtype="button"onclick="lengthProperty()"value="LengthProperty"/>
<h1>valueOf()/toString():</h1>
<inputtype="button"onclick="valueOfMethod()"value="ValueOfMethod"/>
<inputtype="button"onclick="toStringMethod()"value="ToStringMethod"/>
<h1>闭包:</h1>
<inputtype="button"onclick="demoOne()"value="DemoOne"/>
<inputtype="button"onclick="demoTwo()"value="DemoTwo"/>
</body>
相关文章
- JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失
- JavaScript高级[通俗易懂]
- JavaScript案例:移动端轮播图
- JavaScript高级编程:函数Hook与反Hook
- JavaScript学习总结(九)——Javascript面向(基于)对象编程详解编程语言
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- 一个可以得到元素真实的背景颜色的javascript脚本
- 用javascript来实现select标签的美化的代码
- 说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
- JavaScript高级语法介绍
- javascript高级的文件目录排序代码
- javascript学习之闭包分析
- javascript代码加载优化方法
- Javascript中定义方法的另类写法(批量定义js对象的方法)
- javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
- JavaScript高级程序设计(第3版)学习笔记5js语句
- C#javascript读写Cookie的方法
- javascript数组快速打乱重排的方法
- Javascript高级技巧分享
- Javascript仿PHP$_GET获取URL中的参数
- 使用Javascript简单实现图片无缝滚动
- 关于javaScript注册click事件传递参数的不成功问题
- JavaScript中伪协议javascript:使用探讨
- Javascript拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)