JS的with关键字到底是什么?

with关键字

with在JS中通常被当做重复引用同一个对象多个属性的快捷方式。

var obj = {
    a: 1,
    b: 2,
    c: 3
};
// 重复引用obj进行属性赋值
obj.a = 3;
obj.b = 4;
obj.c = 5;

// 等价于以下代码
with (obj) {
    a = 3;
    b = 4;
    c = 5;
}

但会有奇怪的副作用,比如:

function foo (obj){
    with (obj) {
        a: 2;
    }
};

var o1 = { a: 3 };
var o2 = { b: 3 };

foo(o1);
console.log(o1.a); // 2

foo(o2);
console.log(o2.a); // undefined
console.log(a); // 2,a可以从全局访问到!变量泄漏!

你可以想一下为什么会造成变量泄漏

严格模式下,eval和with都是禁止的,因此不要使用。

posted on 2019-07-31 01:34  Vexekefo  阅读(297)  评论(0编辑  收藏  举报