?
1、 无名的函数
2、 定义 JavaScript 函数时可省略函数名,但需存储在变量中,即匿名函数。例如:
3、 上述语法称为函数表达式,可将变量addNumbers作为函数名,并按以下方式调用此函数。
4、 当需要将一个函数作为参数传递给另一个函数时,可以使用函数表达式。例如:
5、 上述内容实现了两个匿名函数的创建:第一个用于返回两数之差,第二个返回两数乘积。随后定义了函数 calculate,其首个参数为函数类型,后两个参数为数值类型。
6、 函数calculate可接收任意函数作为首个参数进行调用。
7、 以参数形式传递函数很简单,这种方式在AJAX中极为常用。例如,传入回调函数,在AJAX调用结束后,用它处理成功或失败的结果。

8、 缺失的参数值
9、 调用函数时,可传递比预期多或少的参数。若调用方法时少传一个参数,则该参数值将被设为undefined。

10、 参数对象
11、 每个 JavaScript 函数都包含一个特殊的 arguments 对象,它是类数组结构,用于存储调用函数时传递的参数。通过 arguments 对象,不仅可以访问单个参数值,还能获取传入函数的参数总数,便于动态处理参数内容。
12、 这个函数默认没有参数传入,正如所说,在JavaScript函数调用时,可传递任意数量的参数,因此也可如此调用方法:
13、 所有参数都在 arguments 对象数组里。可通过 arguments.length 属性获取传入参数的数量。

14、 函数里有函数
15、 函数内部可嵌套子函数,子函数中还能继续嵌套。下面通过代码演示这一特性。
16、 函数 `wakeUpAndCode` 内部包含两个函数:`wakeUp` 和 `code`。调用 `wakeUpAndCode` 时,会依次执行方法体外的两条语句,分别调用 `wakeUp` 和 `code`。其中,`wakeUp` 函数被调用后,会在控制台打印字符串我刚刚醒来;而 `code` 函数被调用后,则会在控制台打印字符串我现在准备好编程了。整个过程简单明了,仅通过两次函数调用完成信息输出。
17、 内部函数能够访问外部函数的所有变量和参数,但它是一种私有实现,仅在所属函数内部可用,外部函数无法访问。有关内部函数与闭包的使用,将在其他文章中探讨。

18、 立即执行函数表达式(IIFE)是一种常用的JavaScript模式。
19、 立即执行函数(IIFE)是声明后立即运行的匿名函数,其形式如下:
20、 只需创建一个匿名函数,在方法定义后加一对括号,将所有代码用括号包裹。最外层括号会将内容转化为表达式,因为JavaScript中括号内不能书写语句。函数定义后的括号可使其立即执行。
21、 自执行函数内部定义的变量仅在本地有效,外部代码无法访问或修改这些变量。
22、 下面的代码中,这个函数无需调用即可自动执行。
23、 将代码复制到 plunker,然后在浏览器控制台查看输出。若不知如何打开控制台,可按 F12 启用开发者工具,接着点击Console标签,查看 console.log 的输出结果。
24、 立即执行函数表达式(IIFE)是创建局部作用域的绝佳方式,能避免变量和函数被外部代码覆盖。那么,IIFE 还有哪些额外优势?它们如何有效防止全局变量污染?请期待我下一篇文章,深入探讨自执行表达式的相关内容。

25、 创建对象时调用
26、 函数可用作构造函数来创建新对象,这一特性让JavaScript更具面向对象特性。通过构造函数,能够创建大量预定义的对象与方法。实际上,其他编程语言中的对象也具备类似的特性,这种方式使得对象的生成更加灵活高效。
27、 我们创建一个 Programmer 函数,带有构造器、属性和方法。在其他语言中,这可以视为一个类。

28、 这个函数有三个参数,通过三个属性和四个方法构建Programmer对象。上述代码非常简单,无需多解释。利用下面的代码,我可以创建多个Programmer对象实例。
29、 当然,也可以通过普通字面量语法创建拥有相同属性和方法的对象,但这样会导致我们反复编写大量相似代码。如果你了解编程中的 DRY 原则(即不要重复自己),就会明白这样做的弊端。而构造函数的优势在于,只需定义一次对象结构,之后随时可以实例化对象,避免重复劳动。