JavaScript 函数调用
-
调用JavaScript函数
定义函数时,不执行函数内的代码。调用函数时,将执行函数内的代码。通常使用术语“call”而不是“invoke”。通常说“调用函数”,“启动函数”或“执行函数”。在本教程中,我们将使用invoke,因为可以在不调用的情况下调用JavaScript函数。
尝试一下function myFunction(a, b) { return a * b; } myFunction(10, 2); // 将返回 20
上述功能不属于任何对象。但是在JavaScript中总是有一个默认的全局对象。在HTML中,默认的全局对象是HTML页面本身,因此上面的函数“属于”HTML页面。在浏览器中,页面对象是浏览器窗口。上述功能自动成为window函数。myFunction()和window.myFunction()是相同的函数:
尝试一下function myFunction(a, b) { return a * b; } window.myFunction(10, 2); // 也将返回 20
这是调用JavaScript函数的常用方法,但不是一个很好的实践。全局变量,方法或函数可以轻松地在全局对象中创建名称冲突和错误。
-
this关键字
在JavaScript中,所谓的this是“拥有”当前代码的对象。 this在函数中使用时,值是“拥有”函数的对象。请注意,this不是变量。这是一个关键字。你无法改变this的值。提示:在this关键字上阅读有关该关键字的更多信息。 -
全局对象
在没有所有者对象的情况下调用函数时,this成为全局对象。在Web浏览器中,全局对象是浏览器窗口。此示例返回window对象的值this:
尝试一下var x = myFunction(); // x将是window对象 function myFunction() { return this; }
调用函数作为全局函数,使的值this是全局对象。将window对象用作变量很容易导致程序崩溃。
-
将函数作为方法调用
在JavaScript中,您可以将函数定义为对象方法。以下示例创建一个对象(myObject),其中包含两个属性(firstName和lastName)和一个方法(fullName):
尝试一下var myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this.firstName + " " + this.lastName; } } myObject.fullName(); // 将返回 "John Doe"
的全名的方法是一个函数。该函数属于该对象。myObject是函数的所有者。所谓的this是“拥有”JavaScript代码的对象。在这种情况下的this的值是myObject的。测试一下!更改fullName方法以返回值this:
尝试一下var myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this; } } myObject.fullName(); // 将返回 [object Object] (所有者对象)
将函数作为对象方法调用,会使值this成为对象本身。
-
使用函数构造函数调用函数
如果函数调用前面有new关键字,则它是构造函数调用。看起来你创建了一个新函数,但由于JavaScript函数是对象,你实际上创建了一个新对象:
尝试一下// 这是一个构造函数: function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // 这里创建一个对象 var x = new myFunction("John", "Doe"); x.firstName; // 将返回 "John"
构造函数中的this关键字没有值。值this将是调用函数时创建的新对象。