Lời gọi hàm JavaScript
Mã bên trong function
JavaScript sẽ thực thi khi "thứ gì đó" gọi nó.
Gọi một hàm JavaScript
Mã bên trong hàm không được thực thi khi hàm được xác định .
Mã bên trong hàm được thực thi khi hàm được gọi .
Người ta thường sử dụng thuật ngữ " gọi hàm " thay vì " gọi hàm ".
Người ta cũng thường nói "gọi một chức năng", "bắt đầu một chức năng" hoặc "thực thi một chức năng".
Trong hướng dẫn này, chúng ta sẽ sử dụng lệnh gọi vì một hàm JavaScript có thể được gọi mà không cần gọi.
Gọi một hàm như một hàm
Ví dụ
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); //
Will return 20
Hãy tự mình thử »Hàm trên không thuộc về bất kỳ đối tượng nào. Nhưng trong JavaScript luôn có một đối tượng toàn cục mặc định.
Trong HTML, đối tượng chung mặc định là chính trang HTML, do đó hàm trên "thuộc về" trang HTML.
Trong trình duyệt, đối tượng trang là cửa sổ trình duyệt. Hàm trên tự động trở thành hàm cửa sổ.
Ghi chú
Đây là cách phổ biến để gọi hàm JavaScript nhưng không phải là cách thực hành tốt.
Các biến, phương thức hoặc hàm toàn cục có thể dễ dàng tạo ra xung đột tên và lỗi trong đối tượng toàn cục.
myFunction() và window.myFunction() có cùng chức năng:
Ví dụ
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // Will also return 20
Hãy tự mình thử »Cái này là cái gì ?
Trong JavaScript, từ khóa this
đề cập đến một đối tượng .
Đối tượng nào phụ thuộc vào cách this
được gọi (được sử dụng hoặc được gọi).
Từ khóa this
đề cập đến các đối tượng khác nhau tùy thuộc vào cách nó được sử dụng:
Trong một phương thức đối tượng, this đề cập đến đối tượng . |
Một mình, this đề cập đến đối tượng toàn cầu . |
Trong một hàm, this đề cập đến đối tượng toàn cục . |
Trong một hàm, ở chế độ nghiêm ngặt, this là undefined . |
Trong một sự kiện, this đề cập đến phần tử đã nhận được sự kiện. |
Các phương thức như call() , apply() và bind() có thể tham chiếu this tới bất kỳ đối tượng nào . |
Ghi chú
this
không phải là một biến. Đó là một từ khóa. Bạn không thể thay đổi giá trị của this
.Xem thêm:
Đối tượng toàn cầu
Khi một hàm được gọi mà không có đối tượng chủ sở hữu, giá trị của this
sẽ trở thành đối tượng toàn cục.
Trong trình duyệt web, đối tượng chung là cửa sổ trình duyệt.
Ví dụ này trả về đối tượng window làm giá trị của this
:
Ví dụ
let x = myFunction();
// x will be the window object
function myFunction() {
return this;
}
Hãy tự mình thử » Việc gọi một hàm như một hàm toàn cục sẽ khiến giá trị của this trở thành đối tượng toàn cục.
Việc sử dụng đối tượng window làm biến có thể dễ dàng làm hỏng chương trình của bạn.
Gọi một hàm như một phương thức
Trong JavaScript, bạn có thể định nghĩa các hàm là các phương thức đối tượng.
Ví dụ sau tạo một đối tượng ( myObject ), với hai thuộc tính ( firstName và LastName ) và một phương thức ( fullName ):
Ví dụ
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"
Hãy tự mình thử »Phương thức fullName là một hàm. Chức năng thuộc về đối tượng. myObject là chủ sở hữu của hàm.
Thứ được gọi là this
, là đối tượng "sở hữu" mã JavaScript. Trong trường hợp này giá trị của this
là myObject .
Kiểm tra nó! Thay đổi phương thức fullName để trả về giá trị của this
:
Ví dụ
const myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
// This will return [object Object] (the owner object)
myObject.fullName();
Hãy tự mình thử » Gọi một hàm như một phương thức đối tượng, khiến giá trị của this
chính là đối tượng đó.
Gọi một hàm bằng hàm tạo hàm
Nếu lời gọi hàm được bắt đầu bằng từ khóa new
thì đó là lời gọi hàm tạo.
Có vẻ như bạn tạo một hàm mới, nhưng vì các hàm JavaScript là đối tượng nên thực tế bạn tạo một đối tượng mới:
Ví dụ
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
const myObj = new myFunction("John", "Doe");
// This will return "John"
myObj.firstName;
Hãy tự mình thử »Lời gọi hàm tạo tạo ra một đối tượng mới. Đối tượng mới kế thừa các thuộc tính và phương thức từ hàm tạo của nó.
Từ khóa this
trong hàm tạo không có giá trị.
Giá trị của this
sẽ là đối tượng mới được tạo khi hàm được gọi.