2015-02-26 3 views
0

'use strict'; не позволяет мне использовать The with statement.Почему используется строгое отклонение от

В чем причина этого?

enter image description here

with (module.init){ 
    //Detect user device 
    detectUserDevice(); 
    //check if Device is touchable 
    isTouchable(); 
    //check if browser supports webSocket 
    webSocket(); 
    //check if browser supports indexedDB 
    indexedDBsupport(); 
    //check if browser supports localStorage 
    checklokalStorage(); 
} 

является кодовым рефакторинга на это, не с возможным?

//Detect user device 
module.init.detectUserDevice(); 

//check if Device is touchable 
module.init.isTouchable(); 

//check if browser supports webSocket 
module.init.webSocket(); 

//check if browser supports indexedDB 
module.init.indexedDBsupport(); 

//check if browser supports localStorage 
module.init.checklokalStorage(); 
+1

Если вы хотите прочитать любой из эти ссылки, вы уже знаете ответ. – zzzzBov

ответ

0

От MDN:

Использование с не рекомендуется, и запрещено в ECMAScript 5 строгого режима . Рекомендуемая альтернатива - назначить объект, свойства которого , к которым вы хотите получить доступ к временной переменной.

Так что вы можете сделать:

var mod = module.init; 
mod.detectUserDevice(); 
mod.isTouchable(); 
mod.webSocket(); 
mod.indexedDBsupport(); 
mod.checklokalStorage(); 
0

Это запрещено strict mode, что является причиной ошибки, так что вы не можете использовать with в strict mode

Во-первых, строгая режим запрещается. Проблема с тем, что любое имя внутри блока может отображать либо свойство объекта , переданное ему, либо переменной в окружении (или даже глобальной), во время выполнения: заранее неизвестно. Строгий режим делает с синтаксической ошибкой, так что нет никаких шансов на имя в с обратиться в неизвестное место во время выполнения: