簡體   English   中英

為什么Closure Compiler生成不同的語法?

[英]Why is Closure Compiler generating different syntax?

為什么Closure Compiler為以下兩個函數生成不同的代碼(使用高級選項):

  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 ,沒有其他變量名與之關聯。 為什么?

我之所以問的是,在情況下,我的代碼,調用function1function2 ,因為改名失敗function1不視為一個函數調用function2而是JavaScript解釋認為, a()是一個數字。

任何見解均表示贊賞。 TIA。

使用ADVANCED_OPTIMIZATIONS,closure編譯器將刪除未使用的代碼。 由於function2的唯一用途是在導出中,因此直接對導出的名稱進行賦值(而不是首先對變量進行賦值)。 function1既被導出又被function2使用,因此編譯器保留了最初的命名函數,因為它被兩次引用。

至於失敗,我們需要查看您的實際代碼來解釋正在發生的事情。

如果“ a”是數字,則很可能會被其他東西覆蓋。 如果您不使用多個模塊,請嘗試使用輸出包裝器選項來隔離全局變量(如果使用多個模塊,則可以使用其他選項來隔離全局變量)。 通常在“ windows.a”上定義一個setter並在其中設置一個斷點將使您知道這種覆蓋是如何發生的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM