2011-12-10 18 views

Trả lời

11

Đây chỉ là tình huống phạm vi tiêu chuẩn - thực tế là biểu thức hàm ẩn danh được truyền dưới dạng tham số cho hàm khác không quan trọng. Lưu ý rằng trong hàm performAction() (mà bạn không hiển thị), nó sẽ không có quyền truy cập vào str là tham số của hàm gọi lại - nếu tham chiếu performAction()str nó sẽ nhận biến "internet" toàn cầu (hoặc địa phương của riêng nó) str nếu được xác định).

Các tham số của hàm là các biến cục bộ của hàm, có nghĩa là chúng che dấu các biến khác có cùng tên từ phạm vi ngoài - nhưng các biến có tên khác nhau vẫn có thể được truy cập ngay cả khi được xác định trong phạm vi rộng hơn phạm vi.

đâu nó có thể được khó hiểu là nếu bạn làm điều gì đó như thế này:

var str = "internet"; 

(function(str) { 
    console.log(str); // "internet" 
    str = "local param"; 
    console.log(str); // "local param" 
})(str); 

console.log(str); // "internet" 

Trong trường hợp đó tôi có một chức năng với một tham số gọi str nhưng khi tôi gọi nó là tôi đi qua trong một khác nhau str. Lưu ý rằng việc thay đổi str trong chức năng đó chỉ thay đổi địa phương str, không thay đổi địa chỉ cục bộ. Chúng là hai biến khác nhau ...

7

về mặt kỹ thuật không có vấn đề gì với nó. Hàm sẽ ghi lại str hiện đang nằm trong phạm vi (tham số của bạn).

Vì lý do rõ ràng, đây không phải là ý tưởng hay. Ít nhất, nó làm cho mã không đọc được.

Các vấn đề liên quan