函数 -- Javascript语言精粹

本文详细介绍了JavaScript中函数的本质及其实现方式,包括函数作为对象的特性、如何通过函数字面量创建函数对象、闭包的概念及其工作原理,并探讨了函数的四种调用模式及其在不同模式下this关键字的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Javascript中函数就是对象。

对象是“名/值”对的集合并拥有一个连到原型对象的隐藏连接。

对象字面量产生的对象连接到Object.prototype。

函数对象连接到Function.prototype(该原型对象本身连接到Object.prototype)。

此外,每个函数对象在创建时也随带有一个 prototype 属性。它的值是一个拥有  constructor 属性且值即为该函数的对象。(所以函数又是构造函数。函数本身加上其 prototype 属性就基本具备了类的全部功能!)

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

闭包:一个函数能够访问它被嵌套在其中的那个函数的参数与变量的特性称为闭包。

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

//创建一个名为 add 的函数
var add = function(a,b){
  return a + b;
};

函数的四种调用模式:

每个函数都有两个默认的参数:this 和 arguments。参数 this 在不同的调用模式中是存在差异的。

1、方法调用模式。

当一个函数被保存为对象的一个属性时,我们称它为一个方法。this 被绑定到该对象。

// 创建 myObject 。它有一个 value 属性和一个 increment 方法。
//  increment 方法接受一个可选的参数。如果参数不是数字,那么默认使用数字1。

var  myObject = {
  value:0,
  increment:function(inc){
    this.value += typeof inc === "number" ? inc : 1;
  }
};

myObject.increment();
document.writeln(myObject.value);    //1
myObject.increment(2);
document.writeln(myObject.value);    //3

2、函数调用模式

如:

var sum = add(3,5);

当函数以此模式调用时成为函数式调用。此时 this 被绑定到全局对象。这是语言设计上的一个错误。

myObject.double = function(){
  var that = this;
  var helper = function(){
     that.value += that.value;
  }
  helper();    //函数调用模式
}

// 以方法的形式调用double
myObject.double();
document.write(myObject.value);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值