Có nguồn xác định nào về chụp biến trong Javascript ngoài tiêu chuẩn (đó là một nỗi đau để đọc tiêu chuẩn)?Hiểu được việc chụp biến bằng cách đóng cửa trong Javascript/Node
Trong đoạn mã sau i
được sao chép theo giá trị:
for (var i = 0; i < 10; i++)
{
(function (i)
{
process.nextTick(function()
{
console.log(i)
})
}) (i)
}
Vì vậy, nó in 1..10. process.nextTick
tương tự với setTimeout(f,0)
trong nút.
Nhưng trong các mã tiếp theo tôi dường như không được sao chép:
for (var i = 0; i < 10; i++)
{
var j = i
process.nextTick(function()
{
console.log(j)
})
}
It in 9 10 lần. Tại sao? Tôi quan tâm nhiều hơn đến một bài viết tham khảo/tổng quát hơn là trong việc giải thích trường hợp cụ thể này.
Nó không phải là rõ ràng lý do tại sao tôi không tạo ra một phạm vi mới cho j – nponeccop
@nponeccop, JavaScript có phạm vi chức năng. –
Tôi đánh đầu vào bàn. Không biết rằng, giả sử đó là C++ hoặc Perl hoặc Haskell :) Hấp dẫn – nponeccop