JavaScript 函数调用


JavaScript 函数有 4 种调用办法。

每种办法的不同办法在于 this 的初始化。


this 关键字

一般来说,在Javascript中,this指向函数履行时的当时目标。

Note 留意 this 是保存关键字,你不能修正 this 的值。

调用 JavaScript 函数

在之前的章节中咱们现已学会了怎么创立函数。

函数中的代码在函数被调用后履行。


作为一个函数调用

实例

function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);           // myFunction(10, 2) 回来 20

测验一下 »

以上函数不归于任何目标。但是在 JavaScript 中它始终是默许的大局目标。

在 HTML 中默许的大局目标是 HTML 页面自身,所以函数是归于 HTML 页面。

在浏览器中的页面目标是浏览器窗口(window 目标)。以上函数会主动变为 window 目标的函数。

myFunction() 和 window.myFunction() 是相同的:

实例

function myFunction(a, b) {
    return a * b;
}
window.myFunction(10, 2);    // window.myFunction(10, 2) 回来 20

测验一下 »

Note 这是调用 JavaScript 函数常用的办法, 但不是杰出的编程习气
大局变量,办法或函数简单形成命名抵触的bug。

大局目标

当函数没有被自身的目标调用是, this 的值就会变成大局目标。

在 web 浏览器中大局目标是浏览器窗口(window 目标)。

该实例回来 this 的值是 window 目标:

实例

function myFunction() {
    return this;
}
myFunction();                // 回来 window 目标

测验一下 »

Note 函数作为大局目标调用,会使 this 的值成为大局目标。
运用 window 目标作为一个变量简单形成程序溃散。

函数作为办法调用

在 JavaScript 中你能够将函数界说为目标的办法。

以下实例创立了一个目标 (myObject), 目标有两个特点 (firstNamelastName), 及一个办法 (fullName):

实例

var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // 回来 "John Doe"

测验一下 »

fullName 办法是一个函数。函数归于目标。 myObject 是函数的所有者。

this目标,具有 JavaScript 代码。实例中 this 的值为 myObject 目标。

测验以下!修正 fullName 办法并回来 this 值:

实例

var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this;
    }
}
myObject.fullName();          // 回来 [object Object] (所有者目标)

测验一下 »

Note 函数作为目标办法调用,会使得 this 的值成为目标自身。

运用结构函数调用函数

假如函数调用前运用了 new 关键字, 则是调用了结构函数。

这看起来就像创立了新的函数,但实际上 JavaScript 函数是从头创立的目标:

实例

// 结构函数:
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}

// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;                             // 回来 "John"

测验一下 »

结构函数的调用会创立一个新的目标。新目标会承继结构函数的特点和办法。

Note 结构函数中 this 关键字没有任何的值。
this 的值在函数调用时实例化目标(new object)时创立。

作为函数办法调用函数

在 JavaScript 中, 函数是目标。JavaScript 函数有它的特点和办法。

call()apply() 是预界说的函数办法。 两个办法可用于调用函数,两个办法的第一个参数有必要是目标自身。

实例

function myFunction(a, b) {
    return a * b;
}
myFunction.call(myObject, 10, 2);      // 回来 20

实例

function myFunction(a, b) {
    return a * b;
}
myArray = [10,2];
myFunction.apply(myObject, myArray);   // 回来 20

两个办法都运用了目标自身作为第一个参数。 两者的差异在于第二个参数: apply传入的是一个参数数组,也便是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开端)。

在 JavaScript 严厉形式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即便该参数不是一个目标。

在 JavaScript 非严厉形式(non-strict mode)下, 假如第一个参数的值是 null 或 undefined, 它将运用大局目标代替。

Note 经过 call() 或 apply() 办法你能够设置 this 的值, 且作为已存在目标的新办法调用。