Nói rằng tôi có đoạn mã sau:javascript thực hiện đơn đặt hàng với setTimeout()
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
tôi thực testA()
. Tôi đã đọc Javascript là đơn luồng. Điều gì xảy ra sau 1000 mili giây, khi hết thời gian chờ cho testB()
?
Một số khả năng tôi có thể nghĩ:
testB()
đang xếp hàng để thực hiện sau khidoLong()
và bất cứ thứ gì nó được gọi là đã hoàn thành.doLong()
bị chấm dứt ngay lập tức vàtestB()
được bắt đầu.doLong()
được thực hiện lâu hơn một chút để thực thi trước khi bị dừng (tự động hoặc sau khi nhắc người dùng) vàtestB()
được bắt đầu.doLong()
bị tạm dừng,testB()
được bắt đầu. Sau khitestB()
đã hoàn tất,doLong()
hồ sơ.
Câu trả lời đúng là gì? Có phải phụ thuộc thực hiện hay một phần của tiêu chuẩn? *
This question tương tự nhưng không giống nhau, theo như tôi có thể biết.
Bất kỳ liên kết nào bạn có thể đề xuất để hiểu rõ hơn về việc thực thi Javascript sẽ được đánh giá cao.
Cảm ơn!
* Vâng, tôi biết rằng không phải tất cả các trình duyệt theo tiêu chuẩn :(
Tôi đã tin rằng 'setTimeout (function() {testB(); }, 1000); 'là cách tốt nhất, tôi có bị lừa dối không? –
@Shadow Wizard: Có, khá nhiều bị nhầm lẫn. Theo như tôi biết không có sự khác biệt giữa con đường của bạn và của tôi (ngoại trừ rằng tôi là ngắn hơn tất nhiên: D). Để minh họa, hãy tưởng tượng nếu chúng ta kéo biểu thức của bạn thành một biến: 'var f = function() {testB(); }; setTimeout (f, 1000); '. Vẫn còn ý nghĩa tương tự, nhưng bây giờ bạn có thể thấy sự thừa. – Jakob
Cảm ơn bạn, cả câu trả lời và lời khuyên về việc chuyển một hàm đến setTimeout thay vì một String. Có vẻ như các hướng dẫn tôi đã đọc không đáng ngờ;) –