`

5.ECMAScript 函数概述

 
阅读更多

1.ECMAScript 函数概述
(1)什么是函数?
函数是一组可以随时随地运行的语句。
函数是 ECMAScript 的核心。
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。
函数的基本语法是这样的:
function functionName(arg0, arg1, ... argN) {
  statements
  return result;/return;
}

(2)如何调用函数?
函数可以通过其名字加上括号中的参数进行调用,如果有多个参数。

(3)函数如何返回值?
即使函数确实有值,也不必明确地声明它。该函数只需要使用 return 运算符后跟要返回的值即可。
注释:如果函数无明确的返回值,或调用了没有参数的 return 语句,那么它真正返回的值是 undefined。



2.ECMAScript arguments 对象
(1)arguments 对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
function sayHi() {
  if (arguments[0] == "bye") {
    return;
  }
  alert(arguments[0]);
}

(2)检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。

(3)模拟函数重载
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载:
function doAdd() {
  if(arguments.length == 1) {
    alert(arguments[0] + 5);
  } else if(arguments.length == 2) {
    alert(arguments[0] + arguments[1]);
  }
}
doAdd(10);  //输出 "15"
doAdd(40, 20);  //输出 "60"



3.ECMAScript Function 对象(类)
(1)ECMAScript 的函数实际上是功能完整的对象。 
用 Function 类直接创建函数的语法如下:
var function_name = new function(arg1, arg2, ..., argN, function_body)
在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。
虽然由于字符串的关系,这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。
请看下面这个例子:
function doAdd(iNum) {
  alert(iNum + 20);
}
function doAdd(iNum) {
  alert(iNum + 10);
}
doAdd(10);  //输出 "20"
第二个函数重载了第一个函数,使 doAdd(10) 输出了 "20",而不是 "30"。
如果以下面的形式重写该代码块,这个概念就清楚了:
var doAdd = new Function("iNum", "alert(iNum + 20)");
var doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd(10);
很显然,doAdd 的值被改成了指向不同对象的指针。函数名只是指向函数对象的引用值,行为就像其他对象一样。

(2)Function 对象的 length 属性
函数属于引用类型,所以它们也有属性和方法。ECMAScript 定义的属性 length 声明了函数期望的参数个数。
function doAdd(iNum) {
  alert(iNum + 10);
}
function sayHi() {
  alert("Hi");
}
alert(doAdd.length);    //输出 "1"
alert(sayHi.length);    //输出 "0"
无论定义了几个参数,ECMAScript 可以接受任意多个参数(最多 25 个)。
属性 length 只是为查看默认情况下预期的参数个数提供了一种简便方式。

(3)Function 对象的方法
Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。
这两个方法返回的都是函数的源代码,在调试时尤其有用。



4.ECMAScript 闭包(closure)
ECMAScript 最易让人误解的一点是,它支持闭包(closure)。
闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
(1)简单的闭包实例
在 ECMAScript 中使用全局变量是一个简单的闭包实例。请思考下面这段代码:
var sMessage = "hello world";
function sayHelloWorld() {
  alert(sMessage);
}
sayHelloWorld();

(2)复杂的闭包实例
在一个函数中定义另一个会使闭包变得更加复杂。例如:
var iBaseNum = 10;
function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}
函数 addNum() 包括函数 doAdd() (闭包)。
内部函数是一个闭包,因为它将获取外部函数的参数 iNum1 和 iNum2 以及全局变量 iBaseNum 的值。
addNum() 的最后一步调用了 doAdd(),把两个参数和全局变量相加,并返回它们的和。
这里要掌握的重要概念是,doAdd() 函数根本不接受参数,它使用的值是从执行环境中获取的。
提示:就像使用任何高级函数一样,使用闭包要小心,因为它们可能会变得非常复杂。

 

(3)初始化用闭包
导入文件,就会被执行。一般用于初始化
(function() {
    alert("do...");
})();

分享到:
评论

相关推荐

    ECMAScript概述

    5. **内部属性**:ECMAScript规范定义了一些内部属性,如`[[Prototype]]`(表示对象的原型)、`[[Value]]`(表示数据属性的值)等,这些都是实现JavaScript引擎的细节,对开发者来说通常是透明的。 6. **执行环境**...

    金鹰asp超速入门视频教程-007.脚本语言概述.rar

    【ASP脚本语言概述】 ASP(Active Server Pages)是由微软公司推出的一种服务器端脚本环境,主要用于构建动态交互式网页。它允许开发者结合HTML、VBScript或JScript等脚本语言,以及各种服务器组件,来创建能够处理...

    ECMAscript

    #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造商协会(ECMA International)制定,旨在提供一种标准的脚本语言语法和功能,用于各种应用环境中。ECMAscript最著名...

    8.函数参数解构赋值.md

    #### 概述 在JavaScript中,函数参数解构赋值是一种非常实用的功能,它允许我们在定义函数时直接对传入的参数进行解构操作,从而简化代码并提高可读性。解构赋值本身是在ES6(ECMAScript 2015)中引入的新特性,它...

    ECMAScript Edition 4 Draft

    4. 数据模型:标准定义了ECMAScript中的数据模型,包括对象的定义、数据类型(如Undefined、Null、Booleans、Numbers、Strings、Namespaces等)、类和简单实例、未实例化的函数、方法闭包、日期、正则表达式以及包和...

    ECMAScript从零开始学-ES6源码

    **5. 带默认参数的函数** 函数参数可以设置默认值,当调用函数时未提供该参数,则使用默认值。 ```javascript function greet(name = 'World') { console.log(`Hello, ${name}!`); } greet(); // 输出 "Hello, ...

    EcmaScript_fifth_edition

    #### 一、概述 EcmaScript(通常简称ES)是一种脚本语言的标准规范,由国际标准化组织ECMA International制定并发布。自1997年首次发布以来,该规范经历了多次更新和完善,EcmaScript第五版(简称ES5)是其中的一个...

    ECMAScript

    ### ECMAScript基础知识点概述 #### 一、ECMAScript简介 ECMAScript(简称ES)是一种被标准化的脚本语言规范,最初由Netscape公司提交至欧洲计算机制造商协会(ECMA International),并最终形成了国际标准ECMA-262...

    ECMAScript 6 入门

    #### 一、ECMAScript 6 概述 **ECMAScript 6**,通常简称为 **ES6**,是 **JavaScript** 语言的一个重要版本,它在2015年6月被正式发布。这个版本引入了大量的新特性,旨在提高开发者的生产力并解决以前版本中存在...

    JDK14-nashorn-users-guide.pdf

    4. ECMAScript 5.1 标准支持:Nashorn 完全支持 ECMAScript 5.1 标准,提供了许多高级特性,如函数式编程、闭包、数组处理等。 Nashorn 的应用场景 1. Web 应用程序开发:Nashorn 可以用于开发高性能的 Web 应用...

    ECMAScript5.1规范中文版

    - **内置函数(Built-in Function)**:ECMAScript 规定必须由实现提供的函数。 - **属性(Property)**:对象的一个命名特性。 - **方法(Method)**:作为对象属性的函数。 - **内置方法(Built-in Method)**:...

    Standard ECMA-2

    - **ECMAScript组件概览**:概述了ECMAScript组件的一般结构和用途。 - **定义**: - **JS Include File**:指定组件使用的JavaScript文件。 - **Type**:组件类型。 - **Constructor**:构造函数,用于创建特定...

    ASP程序设计概述ASP程序设计概述.doc

    4. 函数声明:VBScript中函数声明必须在调用之前,JavaScript则可以在任何位置声明。 5. 对象支持:VBScript和JavaScript都有内置对象,但VBScript更倾向于Windows和ASP环境的对象,而JavaScript支持更多的Web标准...

    JAVASCRIPT函数对象经典语句及其基本应用大全.pdf

    JavaScript函数对象是编程语言ECMAScript的核心组成部分,用于封装可重复使用的代码段。函数通过`function`关键字定义,包括函数名、参数列表以及函数体内的语句。基本语法如下: ```javascript function ...

    javascript parseInt与Number函数的区别.docx

    - 在ECMAScript 5及以前版本中,`parseInt`函数解析以"0"开头的字符串时,默认按八进制解析。 - `Number`函数不依赖于字符串的前缀,总是按照十进制进行解析。 #### 五、总结 综上所述,`parseInt`和`Number`函数...

    【第九章】JavaScript【ECMAScript语法基础】

    以上是JavaScript的ECMAScript语法基础的概述,掌握这些基础知识是成为一名合格的Web开发者的关键。通过不断学习和实践,你可以利用JavaScript构建功能丰富的交互式应用程序,满足各种Web开发需求。

    es6知识点.pdf

    ES6即ECMAScript 6,是JavaScript语言的第六版,于2015年发布,它为JavaScript带来了许多新特性和改进,下面根据给定文件内容,对ES6的核心知识点进行详细说明。 1. let和const命令 - let命令用于声明块作用域的...

    ECMA-262.pdf

    5. **迭代器和生成器**: 提供了用于处理可迭代对象的新特性,如生成器函数和`for...of`循环。 6. **字符串和正则表达式**: 增加了对模板字符串的支持,并改进了正则表达式的功能。 7. **数值和日期**: 引入了`Number...

Global site tag (gtag.js) - Google Analytics