Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Làm cách nào để truyền hàm dưới dạng tham số mà không có chức năng thực thi trong hàm "cha mẹ" hoặc sử dụng

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
8? (Vì tôi đã đọc rằng nó không an toàn.)

Tôi có cái này:

addContact(entityId, refreshContactList());

Nó hoạt động, nhưng vấn đề là

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
9 bắn khi chức năng được gọi, thay vì khi nó được sử dụng trong hàm.

Tôi có thể đi xung quanh nó bằng cách sử dụng

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
8, nhưng đó không phải là cách thực hành tốt nhất, theo những gì tôi đã đọc. Làm thế nào tôi có thể chuyển một hàm dưới dạng tham số trong JavaScript?

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Nic

6.1089 Huy hiệu vàng47 Huy hiệu bạc67 Huy hiệu Đồng9 gold badges47 silver badges67 bronze badges

Hỏi ngày 8 tháng 11 năm 2012 lúc 9:34Nov 8, 2012 at 9:34

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

imperium2335imperium2335imperium2335

22.5K38 Huy hiệu vàng107 Huy hiệu bạc186 Huy hiệu Đồng38 gold badges107 silver badges186 bronze badges

0

Bạn chỉ cần loại bỏ dấu ngoặc đơn:

addContact(entityId, refreshContactList);

Điều này sau đó chuyển chức năng mà không thực hiện nó trước.

Đây là một ví dụ:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);

Đã trả lời ngày 8 tháng 11 năm 2012 lúc 9:34Nov 8, 2012 at 9:34

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

9

Nếu bạn muốn truyền một hàm, chỉ cần tham khảo nó theo tên mà không có dấu ngoặc đơn:

function foo(x) {
    alert(x);
}
function bar(func) {
    func("Hello World!");
}

//alerts "Hello World!"
bar(foo);

Nhưng đôi khi bạn có thể muốn vượt qua một chức năng với các đối số bao gồm, nhưng không được gọi cho đến khi gọi lại. Để làm điều này, khi gọi nó, chỉ cần bọc nó trong một chức năng ẩn danh, như thế này:

function foo(x) {
   alert(x);
}
function bar(func) {
   func();
}

//alerts "Hello World!" (from within bar AFTER being passed)
bar(function(){ foo("Hello World!") });

Nếu bạn thích, bạn cũng có thể sử dụng chức năng áp dụng và có tham số thứ ba là một mảng của các đối số, giống như như vậy:

function eat(food1, food2) {
    alert("I like to eat " + food1 + " and " + food2 );
}
function myFunc(callback, args) {
    //do stuff
    //...
    //execute callback when finished
    callback.apply(this, args);
}

//alerts "I like to eat pickles and peanut butter"
myFunc(eat, ["pickles", "peanut butter"]); 

Đã trả lời ngày 6 tháng 6 năm 2014 lúc 23:11Jun 6, 2014 at 23:11

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Dallindallindallin

8.2002 huy hiệu vàng34 Huy hiệu bạc40 Huy hiệu đồng2 gold badges34 silver badges40 bronze badges

4

Ví dụ 1:

funct("z", function (x) { return x; });

function funct(a, foo){
    foo(a) // this will return a
}

Ví dụ 2:

function foodemo(value){
    return 'hello '+value;
}

function funct(a, foo){
    alert(foo(a));
}

//call funct    
funct('world!',foodemo); //=> 'hello world!'

Nhìn vào điều này

Đã trả lời ngày 8 tháng 11 năm 2012 lúc 9:38Nov 8, 2012 at 9:38

GaddegaddeGadde

1.45115 huy hiệu bạc37 Huy hiệu đồng15 silver badges37 bronze badges

1

Để chuyển chức năng dưới dạng tham số, chỉ cần xóa dấu ngoặc!

function ToBeCalled(){
  alert("I was called");
}

function iNeedParameter( paramFunc) {
   //it is a good idea to check if the parameter is actually not null
   //and that it is a function
   if (paramFunc && (typeof paramFunc == "function")) {
      paramFunc();   
   }
}

//this calls iNeedParameter and sends the other function to it
iNeedParameter(ToBeCalled); 

Ý tưởng đằng sau điều này là một hàm khá giống với một biến. Thay vì viết

function ToBeCalled() { /* something */ }

Bạn cũng có thể viết

addContact(entityId, refreshContactList);
0

Có sự khác biệt nhỏ giữa hai, nhưng dù sao đi nữa - cả hai đều là những cách hợp lệ để xác định một hàm. Bây giờ, nếu bạn xác định một hàm và gán rõ ràng nó cho một biến, nó có vẻ khá hợp lý, bạn có thể chuyển nó dưới dạng tham số cho một hàm khác và bạn không cần dấu ngoặc:

addContact(entityId, refreshContactList);
1

Đã trả lời ngày 8 tháng 11 năm 2012 lúc 9:37Nov 8, 2012 at 9:37

Naivistsnaivistsnaivists

32K5 Huy hiệu vàng58 Huy hiệu bạc83 Huy hiệu Đồng5 gold badges58 silver badges83 bronze badges

1

Có một cụm từ giữa các lập trình viên JavaScript: "Eval là xấu xa" vì vậy hãy cố gắng tránh nó bằng mọi giá!

Ngoài câu trả lời của Steve Fenton, bạn cũng có thể truyền trực tiếp các chức năng.

addContact(entityId, refreshContactList);
2

Đã trả lời ngày 8 tháng 11 năm 2012 lúc 9:39Nov 8, 2012 at 9:39

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Matthew Laytonmatthew LaytonMatthew Layton

37.2K46 Huy hiệu vàng169 Huy hiệu bạc288 Huy hiệu Đồng46 gold badges169 silver badges288 bronze badges

Tôi đã cắt tất cả tóc của mình với vấn đề đó. Tôi không thể làm cho các ví dụ ở trên hoạt động, vì vậy tôi đã kết thúc như:

addContact(entityId, refreshContactList);
3

Và đó là một sự quyến rũ ... cho những gì tôi cần ít nhất. Hy vọng nó có thể giúp một số.

Đã trả lời ngày 15 tháng 4 năm 2016 lúc 9:31Apr 15, 2016 at 9:31

Fenix ​​Aorasfenix AorasFenix Aoras

Huy hiệu bạc 20139 Huy hiệu đồng3 silver badges9 bronze badges

0

Tôi đề nghị đặt các tham số vào một mảng, và sau đó tách chúng lên bằng hàm

function foo(x) {
    alert(x);
}
function bar(func) {
    func("Hello World!");
}

//alerts "Hello World!"
bar(foo);
1. Vì vậy, bây giờ chúng ta có thể dễ dàng vượt qua một chức năng với nhiều tham số và thực hiện nó một cách đơn giản.

addContact(entityId, refreshContactList);
4

Đã trả lời ngày 26 tháng 9 năm 2015 lúc 17:44Sep 26, 2015 at 17:44

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

NaramsimnaramsimNaramsim

7.3614 Huy hiệu vàng35 Huy hiệu bạc42 Huy hiệu đồng4 gold badges35 silver badges42 bronze badges

0

Bạn cũng có thể sử dụng

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
8 để làm điều tương tự.

addContact(entityId, refreshContactList);
5

Đó là nó. Tôi cũng đang tìm kiếm giải pháp này và thử các giải pháp được cung cấp trong các câu trả lời khác nhưng cuối cùng đã có nó hoạt động từ ví dụ trên.

Đã trả lời ngày 23 tháng 1 năm 2014 lúc 11:29Jan 23, 2014 at 11:29

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

NullpointernullpulumNullPointer

2.7283 Huy hiệu vàng33 Huy hiệu bạc57 Huy hiệu Đồng3 gold badges33 silver badges57 bronze badges

1

Đây là một cách tiếp cận khác:

addContact(entityId, refreshContactList);
6

Đã trả lời ngày 15 tháng 1 năm 2014 lúc 16:14Jan 15, 2014 at 16:14

Trong thực tế, có vẻ như hơi phức tạp, không phải.

Nhận phương thức làm tham số:

addContact(entityId, refreshContactList);
7

Bạn có thể đưa ra làm phương thức tham số:

addContact(entityId, refreshContactList);
8

Đã trả lời ngày 14 tháng 10 năm 2014 lúc 9:45Oct 14, 2014 at 9:45

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

1

Các câu trả lời khác làm một công việc tuyệt vời mô tả những gì đang diễn ra, nhưng một "gotcha" quan trọng là đảm bảo rằng bất cứ điều gì bạn đi qua thực sự là một tham chiếu đến một chức năng.

Chẳng hạn, nếu bạn chuyển qua chuỗi thay vì hàm, bạn sẽ gặp lỗi:

addContact(entityId, refreshContactList);
9

Xem jsfiddle

Đã trả lời ngày 23 tháng 3 năm 2015 lúc 20:54Mar 23, 2015 at 20:54

VictorvictorVictor

8281 Huy hiệu vàng9 Huy hiệu bạc24 Huy hiệu đồng1 gold badge9 silver badges24 bronze badges

Một thời gian khi bạn cần đối phó với người xử lý sự kiện, vì vậy cũng cần phải vượt qua sự kiện như một cuộc tranh luận, hầu hết các thư viện hiện đại như React, Angular có thể cần điều này.

Tôi cần ghi đè chức năng onsubmit (chức năng từ thư viện của bên thứ ba) với một số xác thực tùy chỉnh trên Reactjs và tôi đã vượt qua chức năng và sự kiện cả hai như dưới đây

Ban đầu

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
0

Đã thực hiện một chức năng mới

function foo(x) {
    alert(x);
}
function bar(func) {
    func("Hello World!");
}

//alerts "Hello World!"
bar(foo);
3 và được gọi là
function foo(x) {
    alert(x);
}
function bar(func) {
    func("Hello World!");
}

//alerts "Hello World!"
bar(foo);
4 và sự kiện làm đối số

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
1

Đã trả lời ngày 20 tháng 2 năm 2018 lúc 23:50Feb 20, 2018 at 23:50

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Sumitsumitsumit

14.4K11 Huy hiệu vàng63 Huy hiệu bạc108 Huy hiệu đồng11 gold badges63 silver badges108 bronze badges

Bằng cách sử dụng ES6:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
2

Đã trả lời ngày 28 tháng 6 năm 2021 lúc 9:46Jun 28, 2021 at 9:46

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Nếu bạn có thể vượt qua toàn bộ chức năng của mình dưới dạng chuỗi, mã này có thể giúp bạn.

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
3

Đã trả lời ngày 22 tháng 11 năm 2021 lúc 19:19Nov 22, 2021 at 19:19

Hướng dẫn can you pass a function as an argument in javascript? - bạn có thể chuyển một hàm làm đối số trong javascript không?

Akin Zemanakin ZemanAkin Zeman

3613 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

Bạn cũng có thể sử dụng JSON để lưu trữ và gửi các chức năng của JS.

Kiểm tra lượt theo dõi:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
4

Điều này sẽ in 'A'.

Những điều sau đây có tác dụng tương tự với những điều trên:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
5

Cũng có tác dụng tương tự với những điều sau:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
6

Và một mô hình đối tượng sử dụng lớp làm nguyên mẫu đối tượng:

function addContact(id, refreshCallback) {
    refreshCallback();
    // You can also pass arguments if you need to
    // refreshCallback(id);
}

function refreshContactList() {
    alert('Hello World');
}

addContact(1, refreshContactList);
7

Đã trả lời ngày 8 tháng 5 năm 2013 lúc 16:18May 8, 2013 at 16:18

Gazgasgazgasgazgas

2463 Huy hiệu bạc7 Huy hiệu đồng3 silver badges7 bronze badges

1

Bạn có thể vượt qua một chức năng như một đối số?

Các hàm là dữ liệu, và do đó có thể được truyền xung quanh giống như các giá trị khác. Điều này có nghĩa là một hàm có thể được chuyển cho một hàm khác như một đối số. Điều này cho phép chức năng được gọi để sử dụng đối số chức năng để thực hiện hành động của nó.a function can be passed to another function as an argument. This allows the function being called to use the function argument to carry out its action.

Làm thế nào để bạn viết một hàm như một tham số trong JavaScript?

Hãy xác định các chức năng có các tham số 0, 1 và 2:..
// 0 tham số.hàm zero () {return 0;}.
// 1 tham số.nhận dạng hàm (param) {return param;}.
// 2 tham số.hàm sum (param1, param2) {return param1 + param2;}.

Tại sao bạn sẽ chuyển một chức năng như một đối số?

Bởi vì các chức năng là các đối tượng, chúng ta có thể truyền chúng như các đối số cho các chức năng khác.Các chức năng có thể chấp nhận các chức năng khác vì các đối số còn được gọi là các hàm bậc cao hơn.Trong ví dụ dưới đây, một lời chào hàm được tạo có chức năng như một đối số. we can pass them as arguments to other functions. Functions that can accept other functions as arguments are also called higher-order functions. In the example below, a function greet is created which takes a function as an argument.

Bạn có thể sử dụng một chức năng như một tham số của một hàm khác không?

Các chức năng, giống như bất kỳ đối tượng nào khác, có thể được truyền như một đối số cho một hàm khác.can be passed as an argument to another function.