Tôi biết rằng eval
và setTimeout
cả hai có thể chấp nhận một chuỗi là tham số (1) và tôi biết rằng tôi không nên sử dụng điều này. Tôi chỉ tò mò tại sao lại có một sự khác biệt:Sự khác biệt giữa eval và mã chuỗi thực thi setTimeout
!function() {
var foo = 123;
eval("alert(foo)");
}();
!function() {
var foo = 123;
setTimeout("alert(foo)", 0);
}();
là người đầu tiên sẽ làm việc, và lần thứ hai sẽ đưa ra một lỗi: foo is not defined
như thế nào họ thực hiện đằng sau những cảnh?
foo không nằm ngoài phạm vi trước khi gọi lại setTimeout được gọi? –
Tại sao lại rối tung với những thứ xấu xa ^^ Đừng sử dụng một trong hai thứ này :) – Andreas
Một điểm quan sát có liên quan thú vị [ở đây] (https://stackoverflow.com/q/3492015/465053). – RBT