函数
函数是一组可以随时随地运行的语句,它们是ECMAScript的核心。
函数是由关键字function、函数名加一组参数以及置于括号中的要执行的代码声明的。
函数sayHi()未声明返回值,不过不必专门声明它(如在Java中使用void)。
同样的,即使函数确实有返回值,也不必明确地声明它。
该函数只需要使用return运算符后跟要返回的值即可。
另一个重要的概念是,与在Java中一样,函数在执行过return语句后停止执行代码。
因此,return语句后的代码都不会被执行。
如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值是undefined。
1 无重载
ECMAScript中的函数不能重载。
可用相同的名字在同一个作用域中定义两个函数,而不会引发错误,但真正使用的是后一个函数。
2 arguments对象
在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数sayHi()中,第一个参数是message。
用arguments[0]也可以访问这个值,即第一个参数的值(第一个参数位于位置0,第二个参数位于位置1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
还可用arguments对象检测传递给函数的参数个数,引用属性arguments.length即可。
ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数。
开发者定义的函数都可以接受任意个数的参数(根据Netscape的文档,最多能接受25个),而不会引发任何错误。
任何遗漏的参数都会以undefined传递给函数,多余的参数将忽略。
用arguments对象判断传递给函数的参数个数,即可模拟函数重载:
3 Function类
ECMAScript最令人感兴趣的可能莫过于函数实际上是功能完整的对象。Function类可以表示开发者定义的任何函数。
函数只不过是一种引用类型,它们的行为与用Function类明确创建的函数行为相同
尽管可用Function构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。
不过,所有函数都应看作是Function类的实例。
因为函数是引用类型,所以它们也有属性和方法。
ECMAScript定义的属性length声明了函数期望的参数个数。
记住,无论定义了几个参数,ECMAScript函数可以接受任意多个参数(最多25个)。
属性length只是为查看默认情况下预期的参数个数提供了一种简便的方式。
Function对象也有与所有对象共享的标准valueOf()方法和toString()方法。
这两个方法返回的都是函数的源代码,在调试时尤其有用。
4 闭包
所谓闭包,是指词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。
在ECMAScript中使用全局变量是一个简单的闭包实例。
在一个函数中定义另一个函数会使闭包变得更复杂,如下所示:
var iBaseNum = 10;
function addNumbers(iNum1, iNum2) {
function doAddition() {
return iNum1 + iNum2 + iBaseNum;
}
return doAddition();
}
这里,函数addNumbers()包括函数doAddition()(闭包)。
内部函数是个闭包,因为它将获取外部函数的参数iNum1和iNum2以及全局变量iBaseNum的值。
addNumbers()的最后一步调用了内部函数,把两个参数和全局变量相加,并返回它们的和。
这里要掌握的重要概念是doAddition()函数根本不接受参数,它使用的值是从执行环境中获取的。
分享到:
相关推荐
《JavaScript高级程序设计》是JavaScript开发者的经典教材,它深入探讨了这门语言的核心概念和技术。这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的...
JavaScript中的Function类是一种特殊的数据类型,它可以用来动态创建或表示任何开发者定义的函数。通过`new Function()`构造函数,我们可以传递参数列表和函数体来创建一个新的函数。例如,`var sayHi = new ...
### JavaScript高级程序设计读书笔记之九:本地对象Array #### 创建Array对象 在JavaScript中,`Array`是一种非常重要的本地对象,主要用于存储一系列有序的数据。创建`Array`对象的方法有多种,具体包括: 1. **...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其核心规则和规范由ECMAScript标准定义。ECMA-262是这个标准的正式名称,它详细规定了JavaScript的语法、类型、关键字、保留字、操作符以及对象。ECMAScript为...
在JavaScript中,内置对象是指由ECMAScript标准实现并提供的一类特殊对象,它们独立于宿主环境(例如浏览器或Node.js环境)存在,并在程序执行时自动创建。这些对象提供了许多基本功能和常用方法,使得开发者可以...
### JavaScript中的Date对象详解 #### 一、概述 在JavaScript编程语言中,`Date`对象是一种内置对象,用于处理日期和时间数据。它提供了一系列的方法和属性,可以帮助开发者轻松地进行日期时间的操作,如获取当前...
### 基于Springboot的学生读书笔记共享系统关键知识点解析 #### 一、项目背景与目标 本系统旨在为学生提供一个便捷、高效的读书笔记共享平台。随着互联网技术的发展,尤其是移动互联网的普及,学生群体对于知识...
微信小程序全栈开发技术与实战读书笔记模板 微信小程序全栈开发技术与实战是目前非常热门的开发技术之一,本书共16章,主要包括快速上手、基础组件、设计交互、高级组件、数据访问与管理、分层架构、服务逻辑层实现...
这里的"HeaderFirst读书笔记代码.zip"是一个包含作者阅读此书时所编写的源码和笔记的压缩文件,可以帮助读者更直观地理解和学习书中内容。 根据提供的压缩包文件名,我们可以推测这是一系列按照章节顺序排列的HTML...
JavaScript高级程序设计(第三版) You don't know JS 系列 ES6 标准入门 Node.JS深入浅出 图解HTTP HTTP权威指南 Head First Java CSS3揭秘 Linux Command Line 大型网站技术架构核心原理与案例分析 锋利的jQuery ...
最近看JavaScript高级程序设计,大有收获,接下来几天写一下读书笔记。之前写了一篇Ajax初步理解的随笔,里面有个函数用来创建XmlHttpRequest对象,浏览器兼容性原因,写出的代码通过大量if判断或者try,catch语句将...
由于才疏学浅,我不得不将《Javascript 高级程序设计》中的部分内容摘抄过来,这些同时也算是我的读书笔记吧。由于 Javascript 面向对象机制及其的重要,而且内容非常的繁多,在这里就分篇章逐个介绍。 使用对象首先...
JavaScript深入理解系列读书笔记系列这部分只会记载一些笔记,不会深入解读电子书链接:提取码:wube《你不知道JavaScript》中册《JavaScript高级程序设计》数据结构栈队列链表哈希表树图浏览器部分浏览器的主要进程...
JavaScript 是一种高级的脚本语言,主要用于网页的交互性和动态效果的实现。JavaScript 可以用来创建动态网页,实现网页的交互性和动态效果。 网页设计 网页设计是 Web 开发的重要部分,网页设计的目的是创建一个...