JavaScript 函数调用
JavaScript function
内部的代码将在“某些东西”调用它时执行。
调用 JavaScript 函数
函数内部的代码不会在函数被**定义**时执行。
函数内部的代码将在函数被**调用**时执行。
通常使用“**调用函数**”代替“**调用函数**”。
也经常说“调用函数”、“启动函数”或“执行函数”。
在本教程中,我们将使用**调用**,因为 JavaScript 函数可以在没有被调用时被调用。
将函数作为函数调用
上面的函数不属于任何对象。但在 JavaScript 中,总存在一个默认的全局对象。
在 HTML 中,默认的全局对象是 HTML 页面本身,因此上面的函数“属于”HTML 页面。
在浏览器中,页面对象是浏览器窗口。上面的函数会自动成为一个窗口函数。
注意
这是调用 JavaScript 函数的常见方法,但不是最佳实践。
全局变量、方法或函数很容易在全局对象中创建命名冲突和错误。
myFunction() 和 window.myFunction() 是同一个函数
什么是this?
在 JavaScript 中,this
关键字引用一个对象。
this
关键字引用不同的对象,这取决于它的使用方式
在对象方法中,this 引用对象。 |
单独使用,this 引用全局对象。 |
在函数中,this 引用全局对象。 |
在函数中,在严格模式下,this 是 undefined 。 |
在事件中,this 指的是接收事件的元素。 |
像 call() 、apply() 和 bind() 这样的方法可以将 this 指向任何对象。 |
全局对象
当函数没有所有者对象时调用时,this
的值将变为全局对象。
在 Web 浏览器中,全局对象是浏览器窗口。
此示例将窗口对象作为 this
的值返回。
将函数作为全局函数调用会导致 this 的值为全局对象。
将窗口对象用作变量很容易导致程序崩溃。
将函数作为方法调用
在 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
的值将在调用函数时创建的新对象。