Hàm là một khối mã tham số được xác định một lần và được gọi nhiều lần sau đó. Trong JavaScript, một chức năng được cấu thành và chịu ảnh hưởng của nhiều thành phần
- Mã JavaScript tạo thành thân hàm
- Danh sách các tham số
- Các biến có thể truy cập từ phạm vi từ vựng
- Giá trị trả về
- Bối cảnh
6 khi hàm được gọijavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
- Chức năng được đặt tên hoặc ẩn danh
- Biến chứa đối tượng hàm
7 đối tượng [hoặc bị thiếu trong hàm mũi tên]javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Bài đăng này dạy cho bạn sáu cách tiếp cận để khai báo các hàm JavaScript. cú pháp, ví dụ và những cạm bẫy phổ biến. Hơn nữa, bạn sẽ hiểu khi nào nên sử dụng một loại chức năng cụ thể trong một số trường hợp nhất định
Mục lục
1. khai báo hàm
Một khai báo hàm bao gồm từ khóa
8, theo sau là tên hàm bắt buộc, danh sách các tham số trong một cặp dấu ngoặc đơnjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
9 và một cặp dấu ngoặc nhọnjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
0 để phân định mã cơ thểjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
Ví dụ khai báo hàm
javascript
// function declaration
function isEven[num] {
return num % 2 === 0;
}
isEven[24]; // => true
isEven[11]; // => false
1 là một khai báo hàm xác định hàmjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
2, xác định xem một số có chẵn khôngjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
Khai báo hàm tạo một biến trong phạm vi hiện tại với định danh bằng tên hàm. Biến này giữ đối tượng chức năng
Biến hàm được nâng lên trên cùng của phạm vi hiện tại, có nghĩa là hàm có thể được gọi trước khi khai báo [xem để biết thêm chi tiết]
Hàm đã tạo được đặt tên, có nghĩa là thuộc tính
3 của đối tượng hàm giữ nguyên tên của nó. Nó rất hữu ích khi xem ngăn xếp cuộc gọi. trong quá trình gỡ lỗi hoặc đọc thông báo lỗijavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
Hãy xem các thuộc tính này trong một ví dụ
javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Khai báo hàm
4 tạo một biếnjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
5 được nâng lên đầu phạm vi hiện tại. Biếnjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
5 chứa đối tượng hàm và biếnjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
7 chứa tên hàm.javascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
8javascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
1. 1 Một chức năng thông thường
Khai báo hàm phù hợp với các trường hợp khi cần một hàm thông thường. Thông thường có nghĩa là bạn khai báo hàm một lần và sau đó gọi nó ở nhiều nơi khác nhau. Đây là kịch bản cơ bản
javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Bởi vì khai báo hàm tạo ra một biến trong phạm vi hiện tại, bên cạnh các lời gọi hàm thông thường, nó rất hữu ích cho các trình xử lý sự kiện đệ quy hoặc tách rời. Trái ngược với các biểu thức hàm hoặc hàm mũi tên, không tạo ràng buộc với biến hàm theo tên của nó
Ví dụ, để tính giai thừa đệ quy, bạn phải truy cập vào hàm bên trong
javascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
Bên trong
9, một cuộc gọi đệ quy đang được thực hiện bằng cách sử dụng biến chứa hàm.javascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
0javascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
Có thể sử dụng một biểu thức hàm và gán nó cho một biến thông thường, e. g.
1. Nhưng phần khai báo hàmjavascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
2 thì gọn nhẹ [không cầnjavascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
3 vàjavascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
4]javascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
Một thuộc tính quan trọng của khai báo hàm là cơ chế cẩu của nó. Nó cho phép sử dụng hàm trước khi khai báo trong cùng một phạm vi
Palăng rất hữu ích trong một số tình huống. Ví dụ: khi bạn muốn xem cách hàm được gọi ở đầu tập lệnh mà không cần đọc phần triển khai hàm. Việc triển khai chức năng có thể được đặt bên dưới trong tệp, vì vậy bạn thậm chí không thể cuộn ở đó
Bạn có thể đọc thêm chi tiết về cẩu khai báo hàm
1. 2 Sự khác biệt từ biểu thức chức năng
Dễ nhầm lẫn giữa khai báo hàm và biểu thức hàm. Chúng trông rất giống nhau nhưng tạo ra các hàm với các thuộc tính khác nhau
Một quy tắc dễ nhớ. khai báo hàm trong câu lệnh luôn bắt đầu bằng từ khóa
8. Mặt khác, đó là một biểu thức hàm [xem]javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Mẫu sau đây là một khai báo hàm trong đó câu lệnh bắt đầu bằng từ khóa
8javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
javascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
Trong trường hợp các biểu thức hàm, câu lệnh JavaScript không bắt đầu bằng từ khóa
8 [nó hiện diện ở đâu đó ở giữa mã câu lệnh]javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
javascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
1. 3 Khai báo hàm trong điều kiện
Một số môi trường JavaScript có thể gây ra lỗi tham chiếu khi gọi một hàm có khai báo xuất hiện trong các khối
0 của các câu lệnhjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
9,javascript
// Function declaration: starts with "function"
function isNil[value] {
return value == null;
}
0 hoặcjavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
1javascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
Hãy kích hoạt chế độ nghiêm ngặt và xem điều gì sẽ xảy ra khi một hàm được khai báo trong điều kiện
javascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
Khi gọi
2, JavaScript ném rajavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
3, vì khai báo hàm nằm trong một khối điều kiệnjavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
Việc khai báo hàm trong điều kiện được cho phép ở chế độ không nghiêm ngặt, điều này càng khiến nó trở nên khó hiểu hơn
Theo quy tắc chung cho những tình huống này, khi một hàm nên được tạo theo điều kiện - hãy sử dụng biểu thức hàm. Hãy xem làm thế nào nó có thể
javascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
Vì hàm là một đối tượng chính quy, nên gán nó cho một biến tùy thuộc vào điều kiện. Gọi
2 hoạt động tốt, không có lỗijavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
2. biểu thức hàm
Một biểu thức hàm được xác định bởi một từ khóa
8, theo sau là một tên hàm tùy chọn, một danh sách các tham số trong một cặp dấu ngoặc đơnjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
9 và một cặp dấu ngoặc nhọnjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
7 để phân định mã cơ thểjavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
Một số mẫu biểu thức hàm
javascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
Biểu thức hàm tạo một đối tượng hàm có thể được sử dụng trong các tình huống khác nhau
- Được gán cho một biến như một đối tượng
8javascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
- Tạo một phương thức trên một đối tượng
9javascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
- Sử dụng chức năng như một cuộc gọi lại
0javascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
Biểu thức hàm là con ngựa làm việc trong JavaScript. Thông thường, bạn xử lý kiểu khai báo hàm này, bên cạnh hàm mũi tên [nếu bạn thích cú pháp ngắn và ngữ cảnh từ vựng]
2. 1 Biểu thức hàm được đặt tên
Một hàm ẩn danh khi nó không có tên [thuộc tính ______4_______3 là một chuỗi rỗng
2]javascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
javascript
[
function[variable] {return typeof variable; }
].name; // => ''
Đây là một hàm ẩn danh, tên là một chuỗi rỗng
Đôi khi tên hàm có thể được suy ra. Ví dụ: khi ẩn danh được gán cho một biến
0javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Tên hàm ẩn danh là
3, vì tên biếnjavascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
4 được sử dụng để suy ra tên hàmjavascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
Khi biểu thức có tên được chỉ định, đây là biểu thức hàm được đặt tên. Nó có một số thuộc tính bổ sung so với biểu thức hàm đơn giản
- Một chức năng được đặt tên được tạo ra, tôi. e. Thuộc tính
3 giữ tên hàmjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
- Bên trong thân hàm, một biến có cùng tên giữ đối tượng hàm
Hãy sử dụng ví dụ trên, nhưng đặt tên trong biểu thức hàm
1javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
6 là một biểu thức hàm được đặt tên. Biếnjavascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
7 có thể truy cập trong phạm vi chức năng, nhưng không thể truy cập bên ngoài. Dù bằng cách nào, thuộc tínhjavascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
3 của đối tượng hàm giữ tên.javascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
7javascript
[function[] {
'use strict';
if [true] {
function ok[] {
return 'true ok';
}
} else {
function ok[] {
return 'false ok';
}
}
console.log[typeof ok === 'undefined']; // => true
console.log[ok[]]; // Throws "ReferenceError: ok is not defined"
}][];
2. 2 Biểu thức hàm được ưu tiên đặt tên
Khi một biểu thức hàm
0 được gán cho một biến, một số công cụ suy ra tên hàm từ biến này. Tuy nhiên, các cuộc gọi lại có thể được chuyển dưới dạng các biểu thức hàm ẩn danh mà không cần lưu trữ vào các biến. vì vậy động cơ không thể xác định tên của nójavascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
Điều hợp lý là ưu tiên các chức năng được đặt tên và tránh các chức năng ẩn danh để đạt được các lợi ích như
- Thông báo lỗi và ngăn xếp cuộc gọi hiển thị thông tin chi tiết hơn khi sử dụng tên hàm
- Gỡ lỗi thoải mái hơn bằng cách giảm số lượng tên ngăn xếp ẩn danh
- Tên hàm cho biết hàm làm gì
- Bạn có thể truy cập chức năng bên trong phạm vi của nó để gọi đệ quy hoặc tách trình nghe sự kiện
3. định nghĩa phương pháp tốc ký
Định nghĩa phương thức tốc ký có thể được sử dụng trong khai báo phương thức trên các đối tượng bằng chữ và các lớp ES2015. Bạn có thể định nghĩa chúng bằng cách sử dụng tên hàm, theo sau là danh sách các tham số trong một cặp dấu ngoặc đơn
9 và một cặp dấu ngoặc nhọnjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
7 để phân định các câu lệnh nội dungjavascript
// Function expression: starts with "const"
const isTruthy = function[value] {
return !!value;
};
// Function expression: an argument for .filter[]
const numbers = [[1, false, 5]].filter[function[item] {
return typeof item === 'number';
}];
// Function expression [IIFE]: starts with "["
[function messageFunction[message] {
return message + ' World!';
}]['Hello'];
Ví dụ sau sử dụng định nghĩa phương thức tốc ký trong một đối tượng bằng chữ
2javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Các phương thức
3 vàjavascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
4 trong đối tượngjavascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
5 được định nghĩa bằng cách sử dụng định nghĩa phương thức ngắn. Các phương pháp này được gọi như bình thường.javascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
6 vàjavascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
7javascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
Cách tiếp cận ngắn gọn của định nghĩa phương thức có một số lợi ích so với định nghĩa thuộc tính truyền thống với tên, dấu hai chấm
8 và biểu thức hàmjavascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
9javascript
[function[] {
'use strict';
let ok;
if [true] {
ok = function[] {
return 'true ok';
};
} else {
ok = function[] {
return 'false ok';
};
}
console.log[typeof ok === 'function']; // => true
console.log[ok[]]; // => 'true ok'
}][];
- Cú pháp ngắn hơn dễ hiểu hơn
- Định nghĩa phương thức tốc ký tạo ra một hàm được đặt tên, trái ngược với một biểu thức hàm. Nó rất hữu ích để gỡ lỗi
Cú pháp
0 yêu cầu khai báo phương thức ở dạng ngắnjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
3javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
3. 1 Tên và phương thức thuộc tính được tính toán
ECMAScript 2015 thêm một tính năng hay. tên thuộc tính được tính toán theo nghĩa đen và lớp đối tượng
Các thuộc tính được tính toán sử dụng một cú pháp hơi khác
1, vì vậy định nghĩa phương thức trông như thế nàyjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
4javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
2 vàjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
3 là các khai báo phương thức tốc ký với tên thuộc tính được tính toánjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
4. chức năng mũi tên
Một hàm mũi tên được xác định bằng cách sử dụng một cặp dấu ngoặc đơn chứa danh sách các tham số
4, theo sau là một mũi tên béojavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
5 và một cặp dấu ngoặc nhọnjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
0 để phân định các câu lệnh cơ thểjavascript
function factorial[n] {
if [n === 0] {
return 1;
}
return n * factorial[n - 1];
}
factorial[4]; // => 24
Khi hàm mũi tên chỉ có một tham số, có thể bỏ qua cặp dấu ngoặc đơn. Khi nó chứa một câu lệnh đơn, dấu ngoặc nhọn cũng có thể được bỏ qua
Hãy xem chức năng mũi tên sử dụng cơ bản
5javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
7 là hàm mũi tên tính giá trị tuyệt đối của một sốjavascript
const count = function[array] { // Function expression
return array.length;
}
const methods = {
numbers: [1, 5, 8],
sum: function[] { // Function expression
return this.numbers.reduce[function[acc, num] { // func. expression
return acc + num;
}];
}
}
count[[5, 7, 8]]; // => 3
methods.sum[]; // => 14
Hàm được khai báo bằng mũi tên béo có các thuộc tính sau
- Hàm mũi tên không tạo bối cảnh thực thi của nó, nhưng sử dụng nó theo từ vựng [trái ngược với biểu thức hàm hoặc khai báo hàm, tạo ra
6 riêng tùy thuộc vào lệnh gọi]javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
- Chức năng mũi tên là ẩn danh. Tuy nhiên, động cơ có thể suy ra tên của nó từ biến giữ chức năng
- Đối tượng
7 không có sẵn trong hàm mũi tên [trái ngược với các loại khai báo khác cung cấp đối tượngjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
7]. Tuy nhiên, bạn có thể tự do sử dụng các tham số còn lạijavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
1javascript
[
function[variable] {return typeof variable; }
].name; // => ''
4. 1 Minh bạch bối cảnh
Từ khóa
6 là một khía cạnh khó hiểu của JavaScript [xem bài viết này để biết giải thích chi tiết vềjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
6]javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Vì các hàm tạo ngữ cảnh thực thi riêng nên thường rất khó phát hiện giá trị
6javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
ECMAScript 2015 cải thiện việc sử dụng
6 bằng cách giới thiệu chức năng mũi tên, lấy ngữ cảnh theo từ vựng [hoặc đơn giản là sử dụngjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
6 từ phạm vi bên ngoài ngay lập tức]. Điều này thật tuyệt vì bạn không phải sử dụngjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
7 hoặc lưu trữ ngữ cảnhjavascript
[
function[variable] {return typeof variable; }
].name; // => ''
8 khi một hàm cần ngữ cảnh kèm theojavascript
[
function[variable] {return typeof variable; }
].name; // => ''
Hãy xem cách
6 được kế thừa từ hàm bên ngoàijavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
6javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Lớp
00 chứa một mảng số và cung cấp phương thứcjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
01 để chèn số mớijavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Khi
01 được gọi mà không có đối số, một bao đóng được trả về cho phép chèn số. Bao đóng này là một hàm mũi tên cójavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
6 là đối tượngjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
04 vì ngữ cảnh được lấy từ vựng từ phương thứcjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
05javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Không có chức năng mũi tên, bạn phải tự sửa ngữ cảnh. Nó có nghĩa là sử dụng các giải pháp thay thế như phương pháp
06javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
7javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
hoặc lưu ngữ cảnh vào một biến riêng biệt
8javascript
[
function[variable] {return typeof variable; }
].name; // => ''
8javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Tính minh bạch của ngữ cảnh có thể được sử dụng khi bạn muốn giữ nguyên như cũ
6, được lấy từ ngữ cảnh kèm theojavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
4. 2 cuộc gọi lại ngắn
Khi tạo một hàm mũi tên, các cặp dấu ngoặc đơn và dấu ngoặc nhọn là tùy chọn cho một tham số và câu lệnh nội dung đơn. Điều này giúp tạo các chức năng gọi lại rất ngắn
Hãy tạo một hàm tìm xem một mảng có chứa
09 khôngjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
9javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
10 là một hàm mũi tên có vẻ đơn giảnjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Lưu ý rằng các hàm mũi tên ngắn lồng nhau rất khó đọc. Cách thuận tiện để sử dụng biểu mẫu hàm mũi tên ngắn nhất là gọi lại một lần [không lồng nhau]
Nếu cần, hãy sử dụng cú pháp mở rộng của các hàm mũi tên khi viết các hàm mũi tên lồng nhau. Nó chỉ dễ đọc hơn
5. Chức năng máy phát điện
Hàm trình tạo trong JavaScript trả về một đối tượng Trình tạo. Cú pháp của nó tương tự như biểu thức hàm, khai báo hàm hoặc khai báo phương thức, chỉ khác là nó yêu cầu ký tự sao
11javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Hàm tạo có thể được khai báo theo các dạng sau
a. Mẫu khai báo hàm
12javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
0javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
b. Dạng biểu thức hàm
13javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
1javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
c. Biểu mẫu định nghĩa phương pháp tốc ký
14javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
2javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Trong cả 3 trường hợp, hàm tạo trả về đối tượng trình tạo
15. Sau đó,javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
15 được sử dụng để tạo ra một chuỗi các số tăng dầnjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
6. Một điều nữa. chức năng mới
Trong JavaScript, các hàm là các đối tượng hạng nhất - một hàm là một đối tượng thông thường thuộc loại
8javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Các cách khai báo được mô tả ở trên tạo ra cùng một loại đối tượng chức năng. Hãy xem một ví dụ
3javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Loại đối tượng chức năng có một hàm tạo.
18javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Khi
18 được gọi như một hàm tạojavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
20, một hàm mới được tạo. Các đối sốjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
21 được truyền cho hàm tạo trở thành tên tham số cho hàm mới và đối số cuối cùngjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
22 được sử dụng làm mã thân hàmjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Hãy tạo một hàm tính tổng hai số
4javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
23 được tạo bằng lời gọi hàm tạojavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
18 có các tham sốjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
25 vàjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
26 và phần thânjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
27javascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Các chức năng được tạo theo cách này không có quyền truy cập vào phạm vi hiện tại, do đó không thể tạo các bao đóng. Chúng luôn được tạo trong phạm vi toàn cầu
Một ứng dụng có thể có của
28 là cách tốt hơn để truy cập đối tượng toàn cầu trong trình duyệt hoặc tập lệnh NodeJSjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
5javascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Hãy nhớ rằng các chức năng hầu như không bao giờ nên được khai báo bằng cách sử dụng
29. Bởi vì thân hàm được đánh giá trong thời gian chạy, cách tiếp cận này kế thừa nhiềujavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
30 vấn đề sử dụng. rủi ro bảo mật, gỡ lỗi khó hơn, không có cách nào để áp dụng tối ưu hóa công cụ, không có trình chỉnh sửa tự động hoàn thànhjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
7. Cuối cùng, cách nào tốt hơn?
Không có người chiến thắng hay kẻ thua cuộc. Quyết định chọn loại khai báo nào tùy thuộc vào tình huống
Tuy nhiên, có một số quy tắc mà bạn có thể tuân theo trong các tình huống thông thường
Nếu chức năng sử dụng
6 từ chức năng kèm theo, chức năng mũi tên là một giải pháp tốt. Khi chức năng gọi lại có một câu lệnh ngắn, chức năng mũi tên cũng là một lựa chọn tốt, bởi vì nó tạo ra mã ngắn và nhẹjavascript
function sum[a, b] {
return a + b;
}
sum[5, 6]; // => 11
[[3, 7]].reduce[sum] // => 10
Đối với một cú pháp ngắn hơn khi khai báo các phương thức trên các ký tự đối tượng, nên sử dụng khai báo phương thức tốc ký
28 cách khai báo hàm thông thường không nên dùng. Chủ yếu là vì nó mở ra những rủi ro bảo mật tiềm ẩn, không cho phép mã tự động hoàn thành trong trình chỉnh sửa và mất khả năng tối ưu hóa công cụjavascript
// Hoisted variable
console.log[hello['Aliens']]; // => 'Hello Aliens!'
// Named function
console.log[hello.name] // => 'hello'
// Variable holds the function object
console.log[typeof hello]; // => 'function'
function hello[name] {
return `Hello ${name}!`;
}
Bạn thích hàm mũi tên hay biểu thức hàm hơn?
Thích bài viết?
đề xuất cải tiến
Bài đăng chất lượng vào hộp thư đến của bạn
Tôi thường xuyên xuất bản bài viết có chứa
- Các khái niệm JavaScript quan trọng được giải thích bằng các từ đơn giản
- Tổng quan về các tính năng JavaScript mới
- Cách sử dụng TypeScript và cách gõ
- Thiết kế phần mềm và thực hành mã hóa tốt
Đăng ký nhận bản tin của tôi để nhận chúng ngay trong hộp thư đến của bạn
Đặt muaTham gia 6904 thuê bao khác
Giới thiệu về Dmitri Pavlutin
Nhà văn và huấn luyện viên công nghệ. Thói quen hàng ngày của tôi bao gồm [nhưng không giới hạn] uống cà phê, viết mã, viết, huấn luyện, vượt qua sự nhàm chán 😉
Hiện đang làm việc với tư cách là nhà phát triển nguồn mở toàn thời gian trong dự án Readapt - nhằm mục đích làm cho mọi người đều có thể truy cập web