JavaScript 函数调用
JavaScript function
中的代码将在“某事”调用它时执行。
调用 JavaScript 函数
函数中的代码在函数被定义时不会执行。
函数中的代码在函数被调用时执行。
使用“调用函数”而不是“调用函数”是很常见的。
同样,也可以说“调用函数”、“启动函数”或“执行函数”。
在本教程中,我们将使用“调用”,因为 JavaScript 函数可以在不被调用(call)的情况下被调用(invoke)。
将函数作为函数调用
上面的函数不属于任何对象。但在 JavaScript 中,总有一个默认的全局对象。
在 HTML 中,默认的全局对象是 HTML 页面本身,所以上面的函数“属于”HTML 页面。
在浏览器中,页面对象是浏览器窗口。上面的函数会自动成为一个窗口函数。
注意
这是调用 JavaScript 函数的一种常见方式,但不是一种很好的做法。
全局变量、方法或函数很容易在全局对象中产生名称冲突和错误。
myFunction() 和 window.myFunction() 是同一个函数
什么是 this?
在 JavaScript 中,this
关键词指向一个对象。
this
关键词指向不同的对象,具体取决于它的使用方式。
在对象方法中,this 指向对象。 |
单独使用时,this 指向全局对象。 |
在函数中,this 指向全局对象。 |
在严格模式下的函数中,this 是 undefined 。 |
在事件中,this 指向接收事件的元素。 |
诸如 call() 、apply() 和 bind() 等方法可以将 this 指向任何对象。 |
全局对象
当一个函数在没有所有者对象的情况下被调用时,this
的值将是全局对象。
在网页浏览器中,全局对象是浏览器窗口。
此示例返回 window 对象作为 this
的值
将函数作为全局函数调用,会导致 this 的值为全局对象。
将 window 对象用作变量很容易导致程序崩溃。
将函数作为方法调用
在 JavaScript 中,您可以将函数定义为对象方法。
以下示例创建了一个对象(myObject),它有两个属性(firstName 和 lastName),以及一个方法(fullName)。
示例
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // 将返回 "John Doe"
自己动手试一试 »
fullName 方法是一个函数。该函数属于该对象。myObject 是该函数的拥有者。
被称为 this
的东西,是“拥有”JavaScript 代码的对象。在这种情况下,this
的值是 myObject。
试试看!将 fullName 方法更改为返回 this
的值
示例
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// 这将返回 [object Object](所有者对象)
myObject.fullName();
自己动手试一试 »
将函数作为对象方法调用,会导致 this
的值为对象本身。
使用函数构造函数调用函数
如果函数调用前面带有 new
关键字,则为构造函数调用。
看起来您创建了一个新函数,但由于 JavaScript 函数是对象,您实际上是创建了一个新对象。
示例
// 这是一个函数构造函数
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// 这会创建一个新对象
const myObj = new myFunction("John", "Doe");
// 这将返回 "John"
myObj.firstName;
自己动手试一试 »
构造函数调用会创建一个新对象。新对象继承其构造函数的属性和方法。
构造函数中的 this
关键字没有值。
当函数被调用时,this
的值将是新创建的对象。