为什么要严格拒绝使用

时间:2015-02-26 05:10:08

标签: javascript

'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();

2 个答案:

答案 0 :(得分:0)

来自MDN

  

不推荐使用with,并且在ECMAScript 5 strict中禁止使用   模式。建议的替代方法是分配其对象   要访问临时变量的属性。

所以你可以这样做:

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

答案 1 :(得分:0)

strict mode禁止这是错误的原因,因此您无法在with中使用strict mode

  

首先,严格模式禁止使用。与之相关的问题是任何问题   块内的名称可能映射到对象的属性   传递给它,或传递给周围(甚至全局)范围内的变量,   在运行时:事先不可能知道哪个。严格的模式   使用语法错误,因此没有机会在with中使用   在运行时引用未知位置: