js如何动态生成变量、函数并使用

在项目中,为了实现一个需求,走入了误区。然后实现了动态创建变量和函数这么个操作,想了想还是分享出来,有需要的盆友还可以参考下。

目的:

let a = 'x'

// 根据变量a,动态声明一个名为x的变量 let x

首先把坑列出来吧:

1.利用window创建全局变量

window[a] = 'xxx'

// 结果就是利用了全局变量都挂载在window的特点

首先我们并不一定希望创建全局变量,其次此变量若为一个构造函数的话,通过此构造函数声明的变量,最终的构造函数会是一个匿名函数。

2.利用创建对象属性实现

此方法与window下创建差不多,并且不会创建全局变量,但表现形式上不是我们想要的,而且作为构造函数也会有问题。

3.eval 动态声明变量

eval('let '+a+'=1')
console.log(x) // 报错,变量未声明
eval('let '+a+'=1;console.log(x)')
// 打印 1

相信这个是大多数人的第一反应,但是实际上事与愿违,eval的作用域恐怕是独立的,我们在之外是拿不到的,这样只声明成功却不能使用肯定不是我们想要的。

最终方案:

其实这么多方法,还是eval最贴合我们想要的结果,所以对其稍微改动下,实现我们的目的:

let a = 'x'
function callBack(variable){
    console.log(variable) // 打印1
}
eval(`let ${a} = 1;callBack( ${a} )`)

通过回调函数的方式,我们就可以顺利拿到动态创建的变量了

同理,自定义function

 let a = 'x'
function callBack(variable){
    let obj = new variable
    console.log(obj.constructor.name) // 打印x
}
eval(`let ${a}= function(){ };callBack( ${a} )`)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值