3 loại chức năng trong JavaScript là gì?

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

    javascript

    function sum(a, b) {

    return a + b;

    }

    sum(5, 6); // => 11

    ([3, 7]).reduce(sum) // => 10

    6 khi hàm được gọi
  • Chức năng được đặt tên hoặc ẩn danh
  • Biến chứa đối tượng hàm
  • javascript

    function sum(a, b) {

    return a + b;

    }

    sum(5, 6); // => 11

    ([3, 7]).reduce(sum) // => 10

    7 đối tượng (hoặc bị thiếu trong hàm mũi tên)

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

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 đơn

javascript

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ọn

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

0 để phân định mã cơ thể

Ví dụ khai báo hàm

javascript

// function declaration

function isEven(num) {

return num % 2 === 0;

}

isEven(24); // => true

isEven(11); // => false

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

1 là một khai báo hàm xác định hàm

javascript

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ông

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

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

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ỗi

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

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

4 tạo một biến

javascript

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ến

javascript

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ến

javascript

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

8

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

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

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 declaration: starts with "function"

function isNil(value) {

return value == null;

}

0

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.

javascript

// Function declaration: starts with "function"

function isNil(value) {

return value == null;

}

1. Nhưng phần khai báo hàm

javascript

// Function declaration: starts with "function"

function isNil(value) {

return value == null;

}

2 thì gọn nhẹ (không cần

javascript

// 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)

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

8. Mặt khác, đó là một biểu thức hàm (xem)

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

8

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

8 (nó hiện diện ở đâu đó ở giữa mã câu lệnh)

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

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

0 của các câu lệnh

javascript

// Function declaration: starts with "function"

function isNil(value) {

return value == null;

}

9,

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');

0 hoặc

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
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

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');

2, JavaScript ném ra

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');

3, vì khai báo hàm nằm trong một khối điều kiện

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

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');

2 hoạt động tốt, không có lỗi

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

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 đơn

javascript

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ọn

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');

7 để phân định mã cơ thể

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

    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');

    8
  • Tạo một phương thức trên một đối tượng

    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');

    9
  • Sử dụng chức năng như một cuộc gọi lại

    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"

    })();

    0

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

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"

})();

2)

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

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}!`;

}

0

Tên hàm ẩn danh là

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"

})();

3, vì tên biế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"

})();

4 được sử dụng để suy ra tên hàm

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

    javascript

    function factorial(n) {

    if (n === 0) {

    return 1;

    }

    return n * factorial(n - 1);

    }

    factorial(4); // => 24

    3 giữ tên hàm
  • 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

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}!`;

}

1

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"

})();

6 là một biểu thức hàm được đặt tên. Biế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"

})();

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ính

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

3 của đối tượng hàm giữ tê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"

})();

7

2. 2 Biểu thức hàm được ưu tiên đặt tên

Khi một biểu thức hàm

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'

})();

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ó

Đ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

javascript

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ọn

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');

7 để phân định các câu lệnh nội dung

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ữ

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}!`;

}

2

Các phương thức

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'

})();

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ượ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'

})();

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'

})();

7

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

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'

})();

8 và biểu thức hàm

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'

})();

9

  • 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

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

0 yêu cầu khai báo phương thức ở dạng ngắn

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}!`;

}

3

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

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

1, vì vậy định nghĩa phương thức trông như thế này

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}!`;

}

4

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

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án

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ố

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

4, theo sau là một mũi tên béo

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

5 và một cặp dấu ngoặc nhọn

javascript

function factorial(n) {

if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

factorial(4); // => 24

0 để phân định các câu lệnh cơ thể

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

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}!`;

}

5

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

7 là hàm mũi tên tính giá trị tuyệt đối của một số

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

    javascript

    function sum(a, b) {

    return a + b;

    }

    sum(5, 6); // => 11

    ([3, 7]).reduce(sum) // => 10

    6 riêng tùy thuộc vào lệnh gọi)
  • 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

    javascript

    function sum(a, b) {

    return a + b;

    }

    sum(5, 6); // => 11

    ([3, 7]).reduce(sum) // => 10

    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ượng

    javascript

    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ại

    javascript

    (

    function(variable) {return typeof variable; }

    ).name; // => ''

    1

4. 1 Minh bạch bối cảnh

Từ khóa

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

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)
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ị

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

6

ECMAScript 2015 cải thiện việc sử dụng

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

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ụng

javascript

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ụng

javascript

(

function(variable) {return typeof variable; }

).name; // => ''

7 hoặc lưu trữ ngữ cảnh

javascript

(

function(variable) {return typeof variable; }

).name; // => ''

8 khi một hàm cần ngữ cảnh kèm theo

Hãy xem cách

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

6 được kế thừa từ hàm bên ngoài

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ớp

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}!`;

}

00 chứa một mảng số và cung cấp phương thứ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}!`;

}

01 để chèn số mới
Khi

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}!`;

}

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

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

6 là đối tượng

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}!`;

}

04 vì ngữ cảnh được lấy từ vựng từ phương thứ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}!`;

}

05

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

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}!`;

}

06

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}!`;

}

7

hoặc lưu ngữ cảnh vào một biến riêng biệt

javascript

(

function(variable) {return typeof variable; }

).name; // => ''

8

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}!`;

}

8

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ũ

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

6, được lấy từ ngữ cảnh kèm theo

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

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}!`;

}

09 không

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}!`;

}

9

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}!`;

}

10 là một hàm mũi tên có vẻ đơn giản

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

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}!`;

}

11

Hàm tạo có thể được khai báo theo các dạng sau

a. Mẫu khai báo hàm

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}!`;

}

12

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

0

b. Dạng biểu thức hàm

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}!`;

}

13

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

1

c. Biểu mẫu định nghĩa phương pháp tốc ký

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}!`;

}

14

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

2

Trong cả 3 trường hợp, hàm tạo trả về đối tượng trình tạo

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. 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ần

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

8
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ụ

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

3

Loại đối tượng chức năng có một hàm tạo.

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}!`;

}

18
Khi

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}!`;

}

18 được gọi như một hàm tạo

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}!`;

}

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ùng

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}!`;

}

22 được sử dụng làm mã thân hàm

Hãy tạo một hàm tính tổng hai số

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

4

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}!`;

}

23 được tạo bằng lời gọi hàm tạo

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}!`;

}

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ân

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}!`;

}

27

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

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}!`;

}

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 NodeJS

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

5

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

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}!`;

}

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ều

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}!`;

}

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ành

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

javascript

function sum(a, b) {

return a + b;

}

sum(5, 6); // => 11

([3, 7]).reduce(sum) // => 10

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ẹ

Đố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ý

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}!`;

}

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ụ

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 mua

Tham gia 6904 thuê bao khác

3 loại chức năng trong JavaScript là gì?

3 loại chức năng trong JavaScript là gì?

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

Các chức năng khác nhau trong JavaScript là gì?

Có 3 cách viết hàm trong JavaScript. Khai báo hàm . Biểu thức hàm . Hàm mũi tên .

Ba phần của hàm trong JavaScript là gì?

JavaScript cho phép chúng ta truy cập vào ba chức năng toàn cầu. Đối tượng, Mảng và Hàm .

3 phần chung của khai báo hàm là gì?

Thân hàm có ba phần. phần khai báo tùy chọn, phần thực thi và phần xử lý ngoại lệ tùy chọn .

Ba 3 cách để gọi hoặc gọi một hàm trong JavaScript là gì?

Có thể gọi các hàm JavaScript. .
Là một chức năng
Là một phương pháp
Là một nhà xây dựng
thông qua cuộc gọi và áp dụng