JavaScript函数的特性与应用实践深入详解

本文实例讲述了JavaScript函数的特性与应用实践。分享给大家供大家参考,具体如下:

函数用于指定对象的行为。所谓的编程,就是将一组需求分解为一组函数和数据结构的技能。

1 函数对象

JavaScript 函数就是对象。对象是名值对的集合,它还拥有一个连接到原型对象的链接。对象字面量产生的对象连接到 Object.prototype,而函数对象连接到 Function.prototype(这个对象本身连接到 Object.prototype)。每个函数在创建时会附加两个隐藏属性:函数的上下文以及实现函数的代码。

函数对象在创建后会有一个 prototype 属性,它的值是一个拥有 constructor 属性、且值既是该函数的对象。

因为函数是对象,所以可以被当做参数传递给其他函数。它也可以再返回函数。

2 函数字面量

函数可以通过字面量进行创建:

var add = function (a, b) {
  return a + b;
}

这里没有给函数命名,所以称它为匿名函数。

一个内部函数除了可以访问自己的参数和变量之外,还可以访问它的父函数的参数和变量。通过函数字面量创建的函数对象包含一个连接到外部上下文的连接,这被称为闭包。它是 JavaScript 强大表现力的来源。

3 调用

调用一个函数会暂停当前函数的执行,它会传递控制权和参数给这个被调用的函数。

当函数的实际参数的个数与形式参数的个数不匹配时,不会导致运行时错误。如果实际参数的个数过多,那么超出的参数会被忽略;如果实际参数的个数过少,那么缺失的值会是 undefined。不会对参数类型进行检查,所以任何类型的值都可以被传递给任何参数。

3.1 方法调用模式

当一个函数被保存为对象的一个属性时,就称它为方法。当方法被调用时,this 被绑定到这个对象。如果调用表达式包含一个提取属性的动作(即包含一个”.” 点表达式或 “[]” 下标表达式),那么它就是被当做一个方法被调用。

var myObject = {
  value: 0,//属性
  increment: function (inc) {//方法
    this.value += typeof inc === 'number' ? inc : 1;
  }
};
myObject.increment();
console.log(myObject.value);//1
myObject.increment(2);
console.log(myObject.value);//3

这里可以使用 this 来访问自己所属的对象。通过 this 可以取得它们所属对象的上下文的方法被称为公共方法。

3.2 函数调用模式

var add = function (a, b) {
  return a + b;
}
var sum = add(3, 4);//7;this 被绑定到全局对象

这里的 this 被绑定到全局对象,这其实是语言设计上的失误!如果设计正确,那么当内部函数被调用时,this 应该被绑定到外部函数的 this 变量才是。可以这样解决:为这个方法定义一个变量并给它赋值为 this,这样内部函数就可以通过这个变量访问到 this 啦,一般把这个变量命名为 that:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/447.html