有没有办法var x = 1
用动态名称设置局部变量(即),就像我们可以用于对象属性(即o["prefix:" + x]
)?
例如,我有一个CommonJS模块,并将多个组件加载到单独的局部变量中,以方便访问:
var module = require("module") // returns object like {a, b, c} var a = module.a; var b = module.b; var c = module.c;
我希望能够在一行中完成此操作 - 为每个模块的属性设置局部变量.
一种方法是这样的:
Object.assign(local_variable_object, require("module"));
where local_variable_object
是一个以key作为变量名的对象.如果我只想导入部分模块,我可以对结果应用过滤功能require()
.
我意识到我可能会使用eval
,但这会不必要地杀死V8优化编译器,因为它应该在优化时知道这些变量是什么以及它们是否有效.
在ES5中,除非eval
在全球范围之外,否则无法可靠地执行此操作window[varname]
.
ES6 为语言添加了模式匹配,允许您进行解构分配.
var { a, b, c } = require("module");
等同于你的初始例子(以及Babel的ES2015-destructuring插件如何将其转换为ES5):
var module = require("module"); var a = module.a; var b = module.b; var c = module.c;原生ES5解决方法
ES5有一个解决方法,就是在函数中定义自己的"局部作用域"对象,然后像普通对象一样使用它.
function () { "use strict"; var l = {}; var a = "someletter"; l[a] = "A"; console.log(l.someletter); }