2015-06-28 50 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(); 

在上面的代碼中,我聲明變量names並使用name代替了一個錯誤。我認爲'嚴格'模式會抓住它,但它沒有。這不應該在這種情況下拋出一個錯誤?JavaScript「嚴格模式」不能按預期工作?

回答

25

A name全局變量已經存在,與您的代碼無關;它代表當前窗口的名稱,因此您將分配給已經存在的變量。上window

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

一切被聲明爲全球 - 因此它不參考示數,因爲它是在外部作用域賦值給一個變量。

超級混亂:d


"use strict"會阻止定義新的全局變量,我們在這裏執行任務,以現有的變量,把它看作是name在全球範圍內,像window.Blobwindow.console等。

+0

不應''嚴格使用''防止這個嗎? –

+3

@JanDvorak''use strict「'會阻止定義新的全局變量,在這裏我們正在執行一個賦值給_現有的變量_,認爲它是'name'在全局範圍內,比如'window.Blob','窗口。控制檯「等。 –

+0

啊,瀏覽器已經提供了這個名字的變量。我們可以有一個超級嚴格模式,全局名稱不能被名稱訪問嗎? :-) –

相關問題