我怀疑这是一个jsa宏编译器的bug,有内部人员验证一下吗?
满足一定条件,明明有3个函数,但用户无法通过运行按钮或宏列表调用受影响函数:
如果是之前就已经指定了它之后的函数,会出错:
最终最小复现:
function A_trigger() {
var arr = ['a', 'b', 'c'];
var out = [];
for (var i = 0; i < arr.length; i++) {
out.push({ p: arr[i], k: fn(arr[i]) }); // ← 毒药行
}
return out.length;
}
function fn(s) {
var re = /(\d+)|(\D+)/g; // ← 必须含正则
return s.length;
}
function B_gone() { MsgBox("看不到我=bug复现"); }
function C_gone() { MsgBox("看不到我=bug复现"); }给官方的 Bug报告要点:
标题:JSA 宏预扫描器在特定语法组合下停止注册后续函数
触发条件:for 循环内 push({ 裸标识符: 数组[循环变量], 裸标识符: 函数(数组[循环变量]) }),且被调用函数含正则字面量
现象:该行之后声明的函数不出现在“指定宏”列表,按钮绑定报“无法运行宏”;但函数本体可通过代码内调用正常执行(V8 编译器不受影响)
影响:用户无法通过按钮或宏列表调用受影响函数
不影响的安全写法:push([值1, 值2]) 数组 / 预构造对象再 push / push({"引号键": 值}) / 赋值式 obj.key = value
Lv.1 新人创作者