with(this)中with的用法及其优缺点

with语句 扩展一个语句的作用域链。

with (expression) {
    statement
}

描述:

将给定的expression添加到在statement使用的作用域链上。表达式周围的括号是必需的

JavaScript查找某个未使用命名空间的变量时,会通过作用域链来查找,作用域链是跟执行代码的context或者包含这个变量的函数有关。

'with'语句将某个对象添加到作用域链的顶部,如果在statement中有某个未使用命名空间的变量,跟作用域链中的某个属性同名,则这个变量将指向这个属性值。

性能:

利:with语句可以在不造成性能损失的情況下,减少变量的长度。其造成的附加计算量很少。使用'with'可以减少不必要的指针路径解析运算。需要注意的是,很多情況下,也可以不使用with语句,而是使用一个临时变量来保存指针,来达到同样的效果。

弊:with语句使得程序在查找变量值时,都是先在指定的对象中查找。所以那些本来不是这个对象的属性的变量,查找起来将会很慢。如果是在对性能要求较高的场合,'with'下面的statement语句中的变量,只应该包含这个指定对象的属性。

例子:

obj={
    a:1,
    b:2
}
with(obj) {
    console.log(a,b);
}

// 1 2
原文地址:https://www.cnblogs.com/wangxirui/p/15588666.html