跳到主要内容

with

2023年08月07日
柏拉文
越努力,越幸运

一、认识


with 用于扩展一个语句的作用域链。JavaScript 查找某个未使用命名空间的变量时,会通过作用域链来查找,作用域链是跟执行代码的 context 或者包含这个变量的函数有关。'with'语句将某个对象添加到作用域链的顶部,如果在 statement 中有某个未使用命名空间的变量,跟作用域链中的某个属性同名,则这个变量将指向这个属性值。如果沒有同名的属性,则将拋出ReferenceError异常。

二、语法


with (expression)
statement
  • expression: 将给定的表达式添加到在评估语句时使用的作用域链上。表达式周围的括号是必需的。

  • statement: 任何语句。要执行多个语句,请使用一个块语句 ({ ... }) 对这些语句进行分组。

三、场景


3.1 扩充 function 作用域

const obj = {
a: 1,
b: 2
};

function foo() {
with (obj) {
const _a = a;
const _b = b;
const _c = 3;
return _a + _b + _c;
}
}

console.log(foo());

3.2 扩充 new Function 作用域