JavaScript 函数

函数对象

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

函数字面量

什么叫函数字面量?里面包含了

  1. 保留字function
  2. 函数名
  3. 参数
  4. 函数实现

一个内部函数出了可以访问自己的参数和变量,同时它也能自由访问把它嵌套在其中的父函数的参数和变量。

通过函数字面量创建的函数对象包含一个连到外部上下文的连接,这称为闭包。

调用

一共有四种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式。

方法调用模式

含义:当一个函数被保存为对象的一个属性时,成为一个方法。

函数调用模式

含义:当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用。

以此模式调用函数时,this被绑定到全局对象

构造器调用模式

如果在一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时this会绑定到那个新对象上。

“类”最好使用大写格式命名

如果调用构造器函数时没有在前面加上new,这会导致既没有编译时警告,也没有运行时警告,所以大写约定非常重要。

apply调用模式

apply方法让我们构建一个参数数组传递给调用函数,它也允许我们选择this的值。apply方法接收两个参数,第一个是绑定给this的值,第二个值是一个参数数组。

参数

当函数调用的时候,可以获得arguments数组,函数可以通过此函数访问所有它被调用时传递给它的参数列表(并不是函数定义时的那些参数,而是调用时传递的参数)。

arguments并不是一个真正的数组,它只是一个类似数组的对象,但是它有一个length属性。

返回

一个函数总是会返回一个值,如果没有指定返回值,则返回undefined。

扩充类型的功能

通过给Object.prototype添加方法,可以让该方法对所有对象都可用,这样的方式同样对函数、数组、字符串、数字正则表达式同样适用。

闭包

避免在循环中创建函数,他可能会造成无谓的计算,还会引起混淆。

模块

可以使用函数和闭包来构造模块,模块是一个提供接口却隐藏状态与实现的函数或对象。

模块模式一般形式是:一个定义了私有变量和函数的函数,利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可以访问的地方。

级联

有一些方法没有返回值,如果我们让这些方法返回this而不是undefined,就可以启用级联;在一个级联中,我们可以在单独一条语句中依次调用同一个对象的很多方法。

getElement("content")
.a(10)
.b("b")

原文地址:https://www.cnblogs.com/George1994/p/6399920.html