javascript语言精粹(函数)

来源:互联网 发布:怎样利用网络学英语 编辑:程序博客网 时间:2024/06/04 19:26

函数包含一组语句,它们是javascript的基础模块单元,用于代码复用、信息隐藏、组合调用。函数用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能。

函数对象
javascript中的函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接。
对象字面量产生的对象连接到object.prototype.函数对象连接到Function.prototype(该原型对象本身连接到object.prototype)。每个函数在创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。

每个函数对象在创建时也随配有一个protorype属性。它的值是一个拥有constructor属性且值即为该函数的对象。这和隐藏连接到Function.prototype完全不同。

因为函数即是对象,所以它们可以像任何其他的值一样被使用。函数可以保存在变量、对象和数组中。函数可以被当做参数传递给其他函数,函数也可以返回函数。而且,因为函数是对象,所以函数也可以拥有方法。

函数的与众不同在于它们可以被调用。

函数字面量
函数对象通过函数字面量来创建:

//创建一个名为add的变量,并把两个数字相加的函数赋值给它。  var add=function(a,b){        return a+b;    }

函数字面量包括4个部分。第一个部分是保留字function。
第二部分是函数名,它可以被忽略。函数可以用它的名字递归地调用自己。此名字也能被调试器和开发工具来识别函数。如果没有给函数命名,比如上面这个例子,它被称为匿名函数。

函数的第三部分是包围在圆括号中的一组参数。多个参数用逗号分隔。这些参数的名称将被定义为函数中的变量。它们不像普通变量那样被初始化为Undefined,而是在该函数被调用时被初始化为实际提供的参数的值。

第四部分是包围在花括号中的一组语句。这些语句是函数的主体,它们在函数被调用的时候执行。

函数字面量可以出现在任何允许表达式出现的地方。函数也可以被定义在其他函数中。一个内部函数除了可以访问自己的参数和变量,同时它也可以自由访问把它嵌套在其中的父函数的参数和变量。通过函数字面量创建的函数对象包含一个连到外部上下文的连接。这被称为闭包。

调用
调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。参数this在面向对象编程非常重要,它的值取决于调用的模式。在javascript中一共有4种调用模式:方法调用模式、函数调用模式、构造器调用模式、apply调用模式。这些模式在如何初始化关键参数this上存在差异。

调用运算符是跟在任何产生一个函数值的表达式之后的一对圆括号。圆括号内可包含零个或多个用逗号隔开的表达式,每个表达式产生一个参数值。每个参数值被赋予函数声明时定义的形式参数名。当实际参数的个数与形式参数的个数不匹配时,不导致运行时错误。如果实际参数值过多了,超出的参数值会被忽略。如果实际参数值过多了,超出的参数值会被忽略。如果实际参数值过少,缺失的值会被替换为undefined。对参数值不会进行类型检查:
任何类型的值都可以被传递给任何参数。

方法调用模式
函数调用模式
构造器调用模式
Apply调用模式
参数
返回
异常
扩充类型功能
递归
作用域

原创粉丝点击