with语句是JavaScript中已被弃用的语法,它将对象临时加入作用域链以简化属性访问,但因作用域不透明、性能差、易致静默错误且不兼容严格模式而被禁用,推荐使用解构赋值等安全替代方式。
with 语句是 JavaScript 中一个早已被弃用的语法结构,它的作用是将某个对象临时添加到当前作用域链的前端,使得该对象的属性可以像局部变量一样直接访问,无需重复写对象名。
例如:
const obj = { x: 1, y: 2 };
with (obj) {
console.log(x + y); // 3,等价于 obj.x + obj.y
}
这段代码中,x 和 y 被当作当前作用域中的标识符处理,JavaScript 引擎会自动在 obj 上查找它们。
须在运行时重建作用域链,并在所有后续变量查找中多一层对象属性检索,现代 JS 引擎(如 V8)会直接禁用部分优化(如内联缓存)const { x, y } = obj;,清晰、高效、无副作用const o = obj; console.log(o.x + o.y);
它在 ES5 就已被标记为“禁止在严格模式下使用”,所有主流浏览器和构建工具(如 Babel、ESLint)都默认警告或拒绝解析。现在写代码完全没必要用它,也不应该用它。