簡體   English   中英

閉包:為什么一個對象沒有被內聯?

[英]Closure: why doesn't an object get inlined?

我一直遇到閉包編譯器的問題 - 有時它會內聯結構的內容,有時不會。 例如:

(function(){
  const C = {SOMETHING: 0x76, BLA: 123}

  function Test(write) {
    write(5+C.BLA);
  }

  exports.hello = function() {
    return Test;
  };
})()

不內聯:

(function(){function a(b){b(5+c.BLA)}var c={SOMETHING:118,BLA:123};exports.hello=function(){return a}})();

但只需更改Test的導出方式:

(function(){
  const C = {SOMETHING: 0x76, BLA: 123}

  function Test(write) {
    write(5+C.BLA);
  }

  exports.hello = Test;
})()

將導致它內聯罰款:

(function(){exports.hello=function(a){a(128)}})();

我在這里使用 SIMPLE_OPTIMISATIONS,但 ADVANCED_OPTIMISATIONS 並沒有改善問題,類型注釋也沒有:

(function(){
  /** @enum {number} */
  const C = {/** @const */SOMETHING: 0x76, /** @const */BLA: 123}

  function Test(write) {
    write(5+C.BLA);
  }

  exports.hello = function() {
    return Test;
  };
})()

知道為什么它不會內聯嗎? 有沒有辦法從編譯器那里得到報告或找出來?

謝謝!

暫無
暫無

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

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