使用 eval() 这个方法执行一段JS脚本,赋值失败!

在编辑器上希望能够执行一段短的 代码如图

程序拿到这个代码字符串后 使用 eval() 这个方法执行一段JS脚本
然后 SM.arming_info 在执行eval() 的模块内是被修改了
但其他模块内 JS文件内 读取这个变量 还是没有修改前的!

模块A.js 文件 得到编辑器脚本

然后调用模块B.JS 文件的 getEval 方法
该方法内执行
value = eval(strSysValue);
这句

再回到 模块A.JS 获取变量
SM.arming_info 还是旧的值

SM.arming_info是定义在 模块B.JS 里的

这是怎么回事? 大神们 给帮帮忙吧!

我比较好奇这种骚操作到底是为了解决什么业务需求,非要这么写的话注意作用域的问题,估计你的try-catch把error干掉了了,建议别用eval,别用没有错误处理的try-catch

楼上大佬说的对,如果没有必要的话,建议别用eval,如果不可避免非要用,建议用window.eval避免作用域问题

只玩原生么?
h5的话,很多小游戏平台直接没有eval接口给你用。

另外,这样干不如做强点,将整个事件回调逻辑写上去?

主要用户 获取 游戏的 全局数据
脚本编辑器上指定 使用哪个 全局数据

window.eval
这个CC支持吗?我用这个 报错啊!

这是js自带的方法。。。。只能用在h5
讲道理浏览器上不管是手机还是电脑应该可以用,原生工程不保证。

以下摘自MDN:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

那么 大神们

有什么办法 在 编辑器上指定 JS脚本逻辑内 使用哪个 游戏系统自定义的全局变量呢?

类似

这是在告诉 autoUP.js 这个脚本文件内 对应的 upSysData 这个变量被赋值 等于 SM.focus_value_1.pic_id

要做的这件事 怎么办?

分解字符串,按key读取。

let array = ‘SM.focus_value_1.pic_id’.split(’.’);
let value = window;
for (let i = 0; i < array.length; ++i) {
value = value[array[i]];
}
return value;

要是这种 系统变量是数组的 怎么办?

你这样写,i也不知道从哪里来啊。。。。
如果明确知道i是多少的话,比如是3,可以写成arming_set.arming.infos.3,

Array的索引器可以接受字符串: