gpt4 book ai didi

javascript - 为什么 Closure Compiler 会生成不同的语法?

转载 作者:行者123 更新时间:2023-11-30 08:56:17 26 4
gpt4 key购买 nike

为什么 Closure Compiler 会为以下两个函数生成不同的代码(使用 advance 选项):

  var function1 = function() {
return 1 * Math.random();
};

window['function1'] = function1; // export function1

var function2 = function() {
return function1() + 1;
};

window['function2'] = function2; // export function2

这是生成的代码:

  function a() {
return 1 * Math.random();
}

window.function1 = a;

window.function2 = function() {
return a() + 1; // call to a() fails in a more complex example
};

请注意,function1 已重命名为 a,并且 a 已分配给全局变量 function1。对于 function2,没有其他变量名与其关联。为什么?

我问的原因是,在我的代码中,从 function2 调用 function1 失败,因为重命名的 function1 是在 function2 中不被视为函数调用,而是 Javascript 解释器认为 a() 是一个数字。

任何见解都值得赞赏。 TIA。

最佳答案

使用 ADVANCED_OPTIMIZATIONS,Closure Compiler 将删除未使用的代码。由于 function2 的唯一用途是在导出中,因此直接对导出的名称进行赋值(而不是首先对变量进行赋值)。 function1function2 导出和使用,因此编译器保留了初始命名函数,因为它被引用了两次。

至于失败,我们需要查看您的实际代码来解释发生了什么。

关于javascript - 为什么 Closure Compiler 会生成不同的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13371028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com