2015-06-28 17 views
18
var test = function() { 

    'use strict'; 

    var mapNames = { 
     'name': 'City Name:', 
     'coord.lat': 'Latitute:' 
    }; 

    for (var key in mapNames) { 

     var names; 

     if (mapNames[key]) { 
      name = mapNames[key]; 
     } else { 
      name = key; 
     } 
    } 

    console.log(name); 

} 

test(); 

Trong đoạn mã trên, tôi đã nhầm lẫn bằng cách khai báo biến names và sử dụng name thay thế. Tôi nghĩ rằng chế độ 'nghiêm ngặt' sẽ bắt được nó nhưng nó thì không. Điều này không nên ném một lỗi trong trường hợp này?Chế độ nghiêm ngặt của JavaScript không hoạt động như mong đợi?

Trả lời

25

A name biến toàn cầu đã tồn tại, không liên quan đến mã của bạn; nó đại diện cho tên của cửa sổ hiện tại, vì vậy bạn đang gán cho một biến đã tồn tại.

window.name; // the name of the current window for cross-window communication 

Mọi thứ trên window được khai báo là một toàn cầu - vì vậy nó không được tham khảo-erroring kể từ khi nó được gán cho một biến trong một phạm vi bên ngoài.

Siêu khó hiểu: D


"use strict" sẽ ngăn chặn xác định các biến toàn cầu mới, ở đây chúng tôi đang thực hiện một nhiệm vụ đến một biến hiện có, hãy nghĩ về nó như name là trong phạm vi toàn cầu, như window.Blob, window.console và vân vân.

+0

không nên "sử dụng nghiêm ngặt" 'ngăn chặn chính xác điều đó? –

+3

@JanDvorak '" sử dụng nghiêm ngặt "' sẽ ngăn chặn việc xác định các biến toàn cầu mới, ở đây chúng ta đang thực hiện một phép gán cho _an biến hiện tại, nghĩ về nó như 'tên' nằm trong phạm vi toàn cục, như' window.Blob', 'window. console' và như vậy. –

+0

ah, trình duyệt đã cung cấp một biến với tên đó. Chúng ta có thể có một chế độ siêu nghiêm ngặt nơi không thể truy cập hình cầu theo tên? :-) –

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