我怎样才能*解压*一个对象到一个函数的作用域中?

ale*_*lex 5 javascript scope

我有这个代码...

function a(options) {
    for (var item in options) {
       if ( ! options.hasOwnProperty(item)) {
          continue;
       }
       this[item] = options[item];
    }
}

a({ 'abc': 'def' });
Run Code Online (Sandbox Code Playgroud)

js小提琴

虽然从物体以上述解包的变量,它他们设置为全局范围(附着window),因为thiswindow在那种情况下。

所以在我可以做的功能之后alert(abc),它会发出警报def,这不好。

如何将变量的范围设置为函数?

Fel*_*ing 2

如果要将对象的属性放入函数的作用域中,可以使用以下方法扩展作用域with

function a(options) {
    with(options) {
        // properties of `options` are in the scope
        alert(abc);
    }
}
Run Code Online (Sandbox Code Playgroud)

免责声明请务必阅读文档并了解with. 应该避免它,并且也已被弃用:

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

那么问题是为什么不坚持下去options呢?