JavaScript 函數調用
- 上一頁 JS 函數參數
- 下一頁 JS 函數 Call
JavaScript 函數內部的代碼會在“某物”調用它時執行。
調用 JavaScript 函數
在函數被定義時,函數內部的代碼不會執行。
在函數被調用時,函數內部的代碼會被執行。
調用函數通常也可以說“啟動函數”或“執行函數”。
在本教程中,我們使用“調用”。
以函數形式調用函數
實例
function myFunction(a, b) { return a * b; } myFunction(10, 2); // 將返回 20
以上函數不屬于任何對象。但是在 JavaScript 中,始終存在一種默認的全局對象。
在 HTML 中,默認全局對象是 HTML 頁面本身,所有上面的函數“屬于”HTML 頁面。
在瀏覽器中,這個頁面對象就是瀏覽器窗口。上面的函數自動成為一個窗口函數。
myFunction() 和 window.myFunction() 是同一個函數:
實例
function myFunction(a, b) { return a * b; } window.myFunction(10, 2); // 也會返回 20
這是調用函數的常見方法,但并不是一個好習慣。
全局變量、方法或函數很容易在全局對象中產生命名沖突和漏洞。
this 關鍵詞
在 JavaScript 中,被稱為 this
的事物,指的是“擁有”當前代碼的對象。
this
的值,在函數中使用時,是“擁有”該函數的對象。
請注意 this
并不是變量。它屬于關鍵詞。您無法改變 this
的值。
全局對象
當不帶擁有者對象調用對象時,this
的值成為全局對象。
在 web 瀏覽器中,全局對象就是瀏覽器對象。
本例以 this
的值返回這個 window 對象:
實例
var x = myFunction(); // x 將成為 window 對象 function myFunction() { return this; }
調用一個函數作為一個全局函數,會導致 this
的值成為全局對象。
作為變量來使用 window 對象很容易使程序崩潰。
作為方法來調用函數
在 JavaScript 中,您可以把函數定義為對象方法。
下面的例子創建了一個對象(myObject),帶有兩個屬性(firstName 和 lastName),以及一個方法(fullName):
實例
var myObject = { firstName:"Bill", lastName: "Gates", fullName: function () { return this.firstName + " " + this.lastName; } } myObject.fullName(); // 將返回 "Bill Gates"
fullName 方法是一個函數。該函數屬于對象。myObject 是函數的擁有者。
被稱為 this
的事物,是“擁有”這段 JavaScript 代碼的對象。在此例中,this
的值是 myObject。
測試一下!修改這個 fullName 方法來返回 this
的值:
實例
var myObject = { firstName:"Bill", lastName: "Gates", 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("Bill", "Gates"); x.firstName; // 會返回 "Bill"
構造器調用會創建新對象。新對象會從其構造器繼承屬性和方法。
構造器內的 this
關鍵詞沒有值。
this
的值會成為調用函數時創建的新對象。
- 上一頁 JS 函數參數
- 下一頁 JS 函數 Call