Ví dụ: Chức năng là tham số
// program to pass a function as a parameter
function greet[] {
return 'Hello';
}
// passing function greet[] as a parameter
function name[user, func]
{
// accessing passed function
const message = func[];
console.log[`${message} ${user}`];
}
name['John', greet];
name['Jack', greet];
name['Sara', greet];
Đầu ra
Hello John Hello Jack Hello Sara
Trong chương trình trên, có hai chức năng:
function addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
4 và function addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
5.- Hàm
4 có hai tham số.function addStudent[id, refreshCallback] { refreshCallback[]; } function refreshStudentList[] { console.log['Hello']; } addStudent[1, refreshStudentList];
- Hàm
5 được truyền như một đối số cho hàmfunction addStudent[id, refreshCallback] { refreshCallback[]; } function refreshStudentList[] { console.log['Hello']; } addStudent[1, refreshStudentList];
4.function addStudent[id, refreshCallback] { refreshCallback[]; } function refreshStudentList[] { console.log['Hello']; } addStudent[1, refreshStudentList];
Chức năng JavaScript: Bài tập-28 với giải pháp
Viết chương trình JavaScript để vượt qua 'Hàm JavaScript' làm tham số.
Giải pháp mẫu: - -
Mã HTML:
JavaScript program to pass a JavaScript function as parameter
Mã JavaScript:
function addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
Output:
Hello
Flowchart:
Bản thử trực tiếp:
Xem PEN JavaScript- Truyền hàm JavaScript dưới dạng tham số-function-ex- 28 của W3Resource [@w3resource] trên CodePen.
Cải thiện giải pháp mẫu này và đăng mã của bạn thông qua Disqus
Trước đây: Viết hàm JavaScript trả về palindrom dài nhất trong một chuỗi đã cho.Write a JavaScript function that returns the longest palindrome in a given string.
Next: Write a JavaScript function to get the function name.
JavaScript: Lời khuyên trong ngày
Đối tượng hứa hẹn
const myPromise = [] => Promise.resolve['I have resolved!']; function firstFunction[] { myPromise[].then[res => console.log[res]]; console.log['second']; } async function secondFunction[] { console.log[await myPromise[]]; console.log['second']; } firstFunction[]; secondFunction[];
Với một lời hứa, về cơ bản chúng tôi nói rằng tôi muốn thực hiện chức năng này, nhưng tôi sẽ đặt nó sang một bên trong khi nó đang chạy vì điều này có thể mất một lúc. Chỉ khi một giá trị nhất định được giải quyết [hoặc bị từ chối] và khi ngăn xếp cuộc gọi trống, tôi muốn sử dụng giá trị này. Chúng ta có thể nhận được giá trị này với cả. Sau đó và từ khóa đang chờ đợi trong một hàm Async. Mặc dù chúng ta có thể nhận được giá trị của một lời hứa với cả. Sau đó và chờ đợi, nhưng chúng hoạt động hơi khác một chút. Trong FirstFunction, chúng tôi [loại] đặt hàm myPromise sang một bên trong khi nó đang chạy, nhưng tiếp tục chạy mã khác, đó là console.log ['thứ hai'] trong trường hợp này. Sau đó, chức năng được giải quyết với chuỗi tôi đã giải quyết, sau đó được ghi lại sau khi nó thấy rằng Callstack trống. Với từ khóa đang chờ đợi trong SecondFunction, chúng tôi thực sự tạm dừng việc thực hiện hàm async cho đến khi giá trị đã được giải quyết trước khi chuyển sang dòng tiếp theo. Điều này có nghĩa là nó đã chờ đợi MyPromise giải quyết với giá trị tôi đã giải quyết và chỉ một khi điều đó xảy ra, chúng tôi đã chuyển sang dòng tiếp theo: thứ hai được ghi lại.
We can get this value with both .then and the await keyword in an async function. Although we can get a promise's value with both .then and await, they work a bit differently.
In the firstFunction, we [sort of] put the myPromise function aside while it was running, but continued running the other code, which is console.log['second'] in this case. Then, the function resolved with the string I have resolved, which then got logged after it saw that the callstack was empty.
With the await keyword in secondFunction, we literally pause the execution of an async function until the value has been resolved before moving to the next line.
This means that it waited for
the myPromise to resolve with the value I have resolved, and only once that happened, we moved to the next line: second got logged.
Tham khảo: //bit.ly/3jfrbje
817
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
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 addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
9? [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à
Hello0 bắn khi hàm đượ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 addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
9, 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?
Nic
6.0989 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
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
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:
Hello John Hello Jack Hello Sara0
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:
Hello John Hello Jack Hello Sara1
Đã trả lời ngày 6 tháng 6 năm 2014 lúc 23:11Jun 6, 2014 at 23:11
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:
Hello John Hello Jack Hello Sara2
Ví dụ 2:
Hello John Hello Jack Hello Sara3
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!
Hello John Hello Jack Hello Sara4
Ý 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
Hello John Hello Jack Hello Sara5
Bạn cũng có thể viết
Hello John Hello Jack Hello Sara6
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:
Hello John Hello Jack Hello Sara7
Đã 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.
Hello John Hello Jack Hello Sara8
Đã trả lời ngày 8 tháng 11 năm 2012 lúc 9:39Nov 8, 2012 at 9:39
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ư:
Hello John Hello Jack Hello Sara9
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
Hello2. 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.
JavaScript program to pass a JavaScript function as parameter
0Đã trả lời ngày 26 tháng 9 năm 2015 lúc 17:44Sep 26, 2015 at 17:44
NaramsimnaramsimNaramsim
7.3514 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 addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
9 để làm điều tương tự.
JavaScript program to pass a JavaScript function as parameter
1Đó 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
NullpointernullpulumNullPointer
2.7263 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:
JavaScript program to pass a JavaScript function as parameter
2Đã 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ố:
JavaScript program to pass a JavaScript function as parameter
3Bạn có thể đưa ra làm phương thức tham số:
JavaScript program to pass a JavaScript function as parameter
4Đã trả lời ngày 14 tháng 10 năm 2014 lúc 9:45Oct 14, 2014 at 9:45
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:
JavaScript program to pass a JavaScript function as parameter
5Xem 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
JavaScript program to pass a JavaScript function as parameter
6Đã thực hiện một chức năng mới
Hello4 và được gọi là
Hello5 và sự kiện làm đối số
JavaScript program to pass a JavaScript function as parameter
7Đã trả lời ngày 20 tháng 2 năm 2018 lúc 23:50Feb 20, 2018 at 23:50
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:
JavaScript program to pass a JavaScript function as parameter
8Đã trả lời ngày 28 tháng 6 năm 2021 lúc 9:46Jun 28, 2021 at 9:46
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.
JavaScript program to pass a JavaScript function as parameter
9Đã trả lời ngày 22 tháng 11 năm 2021 lúc 19:19Nov 22, 2021 at 19:19
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 addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
0Đ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 addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
1Cũng có tác dụng tương tự với những điều sau:
function addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
2Và một mô hình đối tượng sử dụng lớp làm nguyên mẫu đối tượng:
function addStudent[id, refreshCallback]
{
refreshCallback[];
}
function refreshStudentList[] {
console.log['Hello'];
}
addStudent[1, refreshStudentList];
3Đã 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