Hướng dẫn can you put a function in a variable javascript? - bạn có thể đặt một hàm trong một biến javascript không?

Đây là danh sách trên các biểu mẫu tiêu chuẩn tạo ra các chức năng: (ban đầu được viết cho một câu hỏi khác, nhưng được điều chỉnh sau khi được chuyển vào câu hỏi chính tắc.)

Terms:

  • ES5: ECMAScript Phiên bản thứ 5, 2009: ECMAScript 5th edition, 2009
  • ES2015: ECMAScript 2015 (còn được gọi là "ES6"): ECMAScript 2015 (also known as "ES6")

Danh sách nhanh:

  • Tuyên bố chức năng

  • Biểu thức "ẩn danh"

    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    4 (mặc dù thuật ngữ này, đôi khi tạo ra các hàm với tên)

  • Được đặt tên là biểu thức

    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    4

  • Trình khởi tạo chức năng Accessor (ES5+)

  • Biểu thức chức năng mũi tên (ES2015+) (giống như các biểu thức hàm ẩn danh, không liên quan đến một tên rõ ràng và vẫn có thể tạo các chức năng với tên)

  • Khai báo phương thức trong Bộ khởi tạo đối tượng (ES2015+)

  • Tuyên bố và khai báo phương thức trong

    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    6 (ES2015+)

Tuyên bố chức năng

Biểu thức "ẩn danh"

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
4 (mặc dù thuật ngữ này, đôi khi tạo ra các hàm với tên)

function x() {
    console.log('x');
}

Được đặt tên là biểu thức

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
4

Trình khởi tạo chức năng Accessor (ES5+)before any step-by-step code is executed. The function it creates is given a proper name (

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
8 in the example above), and that name is put in the scope in which the declaration appears.

Biểu thức chức năng mũi tên (ES2015+) (giống như các biểu thức hàm ẩn danh, không liên quan đến một tên rõ ràng và vẫn có thể tạo các chức năng với tên)

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}

Khai báo phương thức trong Bộ khởi tạo đối tượng (ES2015+)

if (someCondition) {
    function foo() {    // <===== HERE THERE
    }                   // <===== BE DRAGONS
}

Tuyên bố và khai báo phương thức trong

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
6 (ES2015+)

Mẫu đầu tiên là một khai báo chức năng, trông như thế này:

Một tuyên bố chức năng là một tuyên bố; Nó không phải là một tuyên bố hoặc biểu hiện. Như vậy, bạn không theo dõi nó với

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
7 (mặc dù làm như vậy là vô hại).

  1. Một khai báo chức năng được xử lý khi thực thi vào bối cảnh xuất hiện, trước khi bất kỳ mã từng bước nào được thực thi. Hàm mà nó tạo ra được đặt một tên thích hợp (
    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    8 trong ví dụ trên) và tên đó được đặt trong phạm vi trong đó tuyên bố xuất hiện.
  2. Bởi vì nó được xử lý trước bất kỳ mã từng bước nào trong cùng một bối cảnh, bạn có thể làm những việc như thế này:
  3. Cho đến ES2015, thông số kỹ thuật không bao gồm những gì động cơ JavaScript nên làm nếu bạn đặt một khai báo chức năng bên trong cấu trúc điều khiển như
    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    9,
    if (someCondition) {
        function foo() {    // <===== HERE THERE
        }                   // <===== BE DRAGONS
    }
    
    0,
    if (someCondition) {
        function foo() {    // <===== HERE THERE
        }                   // <===== BE DRAGONS
    }
    
    1,
    if (someCondition) {
        function foo() {    // <===== HERE THERE
        }                   // <===== BE DRAGONS
    }
    
    2, v.v., như thế này:

Và vì chúng được xử lý trước khi mã từng bước được chạy, thật khó để biết phải làm gì khi ở trong cấu trúc điều khiển.

"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)

Mặc dù việc này không được chỉ định cho đến ES2015, nhưng đó là một phần mở rộng được phép hỗ trợ khai báo chức năng trong các khối. Thật không may (và chắc chắn), các động cơ khác nhau đã làm những điều khác nhau.

Kể từ ES2015, đặc điểm kỹ thuật nói phải làm gì. Trên thực tế, nó cung cấp cho ba điều riêng biệt để làm:

var y = function () {
    console.log('y');
};

Nếu ở chế độ lỏng không có trên trình duyệt web, công cụ JavaScript được cho là sẽ làm một việc

Nếu ở chế độ lỏng lẻo trên trình duyệt web, công cụ JavaScript được cho là làm việc khác

Được đặt tên là biểu thức x(); // Works even though it's above the declaration function x() { console.log('x'); } 4

Trình khởi tạo chức năng Accessor (ES5+)

var z = function w() {
    console.log('zw')
};

Biểu thức chức năng mũi tên (ES2015+) (giống như các biểu thức hàm ẩn danh, không liên quan đến một tên rõ ràng và vẫn có thể tạo các chức năng với tên)

var z = function w() {
    console.log(typeof w); // "function"
};
console.log(typeof w);     // "undefined"

Khai báo phương thức trong Bộ khởi tạo đối tượng (ES2015+)

Trình khởi tạo chức năng Accessor (ES5+)

Biểu thức chức năng mũi tên (ES2015+) (giống như các biểu thức hàm ẩn danh, không liên quan đến một tên rõ ràng và vẫn có thể tạo các chức năng với tên)

var obj = {
    value: 0,
    get f() {
        return this.value;
    },
    set f(v) {
        this.value = v;
    }
};
console.log(obj.f);         // 0
console.log(typeof obj.f);  // "number"

Khai báo phương thức trong Bộ khởi tạo đối tượng (ES2015+)

Tuyên bố và khai báo phương thức trong

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
6 (ES2015+)

Biểu thức chức năng mũi tên (ES2015+)

ES2015 mang đến cho chúng ta chức năng mũi tên. Đây là một ví dụ:

var a = [1, 2, 3];
var b = a.map(n => n * 2);
console.log(b.join(", ")); // 2, 4, 6

Xem điều đó

"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)
2 đang ẩn trong cuộc gọi
"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)
3? Đó là một chức năng.

Một vài điều về các chức năng mũi tên:

  1. Họ không có

    "use strict";
    if (someCondition) {
        foo();               // Works just fine
        function foo() {
        }
    }
    console.log(typeof foo); // "undefined" (`foo` is not in scope here
                             // because it's not in the same block)
    
    4 của riêng họ. Thay vào đó, họ đóng cửa trên
    "use strict";
    if (someCondition) {
        foo();               // Works just fine
        function foo() {
        }
    }
    console.log(typeof foo); // "undefined" (`foo` is not in scope here
                             // because it's not in the same block)
    
    4 của bối cảnh nơi họ được xác định. .

  2. Như bạn đã nhận thấy với những điều trên, bạn không sử dụng từ khóa

    x(); // Works even though it's above the declaration
    function x() {
        console.log('x');
    }
    
    4; Thay vào đó, bạn sử dụng
    var y = function () {
        console.log('y');
    };
    
    1.

Ví dụ

"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)
2 ở trên là một dạng của chúng. Nếu bạn có nhiều đối số để vượt qua chức năng, bạn sẽ sử dụng Parens:

var a = [1, 2, 3];
var b = a.map((n, i) => n * i);
console.log(b.join(", ")); // 0, 2, 6

(Hãy nhớ rằng

var y = function () {
    console.log('y');
};
3 chuyển mục nhập dưới dạng đối số đầu tiên và chỉ mục là thứ hai.)

Trong cả hai trường hợp, cơ thể của chức năng chỉ là một biểu thức; Giá trị trả về của hàm sẽ tự động là kết quả của biểu thức đó (bạn không sử dụng

var y = function () {
    console.log('y');
};
4 rõ ràng).

Nếu bạn đang làm nhiều hơn là một biểu thức duy nhất, hãy sử dụng

var y = function () {
    console.log('y');
};
5 và một
var y = function () {
    console.log('y');
};
4 rõ ràng (nếu bạn cần trả về một giá trị), như bình thường:

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
0

Phiên bản không có

var y = function () {
    console.log('y');
};
7 được gọi là chức năng mũi tên với thân biểu thức hoặc cơ thể súc tích. . (Ngoài ra: một hàm mũi tên dài dòng.)

Khai báo phương thức trong Bộ khởi tạo đối tượng (ES2015+)

ES2015 cho phép một hình thức ngắn hơn để khai báo một thuộc tính tham chiếu một hàm gọi là định nghĩa phương thức; Có vẻ như thế này:

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
1

gần như tương đương trong ES5 và trước đó sẽ là:

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
2

Sự khác biệt (khác với độ verbosity) là một phương pháp có thể sử dụng

"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)
7, nhưng một hàm không thể. Vì vậy, ví dụ, nếu bạn có một đối tượng được xác định (giả sử)
var z = function w() {
    console.log('zw')
};
0 bằng cách sử dụng cú pháp Phương thức, nó có thể sử dụng
var z = function w() {
    console.log('zw')
};
1 để nhận giá trị
var z = function w() {
    console.log('zw')
};
2 đã trả lại (trước khi có lẽ làm điều gì đó khác với nó), trong khi phiên bản ES5 sẽ phải làm
var z = function w() {
    console.log('zw')
};
3 thay vì.

Điều đó cũng có nghĩa là phương thức có một tham chiếu đến đối tượng mà nó được xác định, vì vậy nếu đối tượng đó là tạm thời (ví dụ, bạn sẽ chuyển nó vào

var z = function w() {
    console.log('zw')
};
4 là một trong các đối tượng nguồn), Phương thức cú pháp có thể có nghĩa là đối tượng là Được giữ lại trong bộ nhớ khi nếu không nó có thể được thu thập rác (nếu động cơ JavaScript không phát hiện tình huống đó và xử lý nó nếu không có phương pháp nào sử dụng
"use strict";
if (someCondition) {
    foo();               // Works just fine
    function foo() {
    }
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
                         // because it's not in the same block)
7).

Tuyên bố và khai báo phương thức trong x(); // Works even though it's above the declaration function x() { console.log('x'); } 6 (ES2015+)

ES2015 mang đến cho chúng ta cú pháp

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
6, bao gồm các hàm tạo và phương pháp được khai báo:

x(); // Works even though it's above the declaration
function x() {
    console.log('x');
}
3

Có hai khai báo chức năng ở trên: một cho hàm tạo, có tên

var z = function w() {
    console.log('zw')
};
8 và một cho
var z = function w() {
    console.log('zw')
};
9, là một hàm được gán cho
var z = function w() {
    console.log(typeof w); // "function"
};
console.log(typeof w);     // "undefined"
0.

Bạn có thể đặt một chức năng bên trong một javascript biến không?

Chúng tôi đặt hàm vào một biến nếu bên trong khối hàm, chúng tôi sử dụng phương thức trả về: var multytwo = function (a) {return a * 2;};Nếu chúng ta chỉ cần gọi chức năng này, sẽ không có gì được in, mặc dù không có gì sai với việc viết của chính chức năng.: var multiplyTwo = function (a) { return a * 2; }; if we simply call this function, nothing will be printed, although nothing is wrong with the writing of the function itself.

Bạn có thể sử dụng chức năng trong một biến không?

Trong Python, chúng ta có thể gán một hàm cho một biến.Và sử dụng biến đó, chúng tôi có thể gọi hàm nhiều như thời gian chúng tôi muốn.we can assign a function to a variable. And using that variable we can call the function as many as times we want.

Làm thế nào để bạn gán một hàm cho một biến?

Phương pháp 1: Gán đối tượng hàm cho tên biến mới Một cách đơn giản để hoàn thành tác vụ là tạo tên biến mới G và gán đối tượng hàm f cho biến mới với câu lệnh f = g.create a new variable name g and assign the function object f to the new variable with the statement f = g.

Bạn có thể đặt một chức năng trong một đối tượng javascript không?

Bạn có thể gọi một hàm bên trong một đối tượng bằng cách khai báo chức năng là thuộc tính trên đối tượng và gọi nó, ví dụ:obj.tổng (2, 2).Thuộc tính của một đối tượng có thể trỏ đến một hàm, giống như nó có thể trỏ đến một chuỗi, số hoặc các giá trị khác.Đã sao chép!, e.g. obj. sum(2, 2) . An object's property can point to a function, just like it can point to a string, number or other values. Copied!