簡體   English   中英

如何調用在另一個函數中聲明的子函數

[英]How to call child function which is declared inside another function

函數b在函數a中聲明。 所以,我試圖在功能a之外調用功能b。 它沒有被調用。

var a = function() {
  alert("a");
  var b = function() {
    alert("b");
  }
}

輸出:-功能b稱為帶有消息b的警報框

您需要返回b並使用它。 這將涉及調用函數a開頭,但隨后您將擁有一個可以反復調用以提醒b的函數:

 var a = function() { alert("a"); var b = function() { alert("b"); } return b; } var messageB = a(); messageB(); messageB(); 

嘗試在“ a”函數外部聲明“ b”變量:

var b;
var a = function() {
    alert("a");
    b = function() {
        alert("b");
    };
};

這樣,您可以訪問b從外面a ,因為它是在它之外聲明。 a被稱為第一次,這將是undefined的,所以你不能調用ba 此外,如果你調用a兩次,以前b將被重寫,如下所示:

  var b;

  var a = function(name) {
    b = function() { alert(name); };
  };

  a("first version");
  b(); // first version
  a("second version");
  b(); // second version

如果你不需要任何內部變量a內部b ,沒有理由嵌套雖然功能,在這種情況下,你應該有兩個獨立的功能:

  var a = function() { alert("a"); };
  var b = function() { alert("b"); };

首先返回該函數並調用它,

 var a = function() { alert("a"); var b = function() { alert("b"); } return b; } var b = a(); b(); 

如前所述,您可以簡單地返回函數b。 Java語言中的函數可以像這樣傳遞,這是垃圾收集語言的一個很好的功能。

但是您可以做得更好,如果您想公開多個功能呢?

您可以只返回帶有附加方法的對象。

 function A() { let value = 0; return { inc: () => ++ value, dec: () => -- value, show: () => console.log(value) } } const a1 = A(); a1.inc(); a1.inc(); a1.show(); const b1 = A(); b1.inc(); b1.dec(); b1.dec(); b1.show(); 

現在,上面的內容看起來與所謂的class非常相似,但事實並非如此。 這樣做的一個缺點是,如果您想創建數千個實例,則一個類會更好,因為它可以將其方法放在原型上。 話雖如此,正如使用React Hooks所發現的那樣,那時還不是很糟糕。

上述的一個大好處,就是你不必陷入泥濘的世界this實例的背景下。

為了完整起見,這里是一個類版本。

 class A { value = 0; inc() { ++ this.value; } dec() { -- this.value; } show() { console.log(this.value) } }; const a1 = new A(); a1.inc(); a1.inc(); a1.show(); const b1 = new A(); b1.inc(); b1.dec(); b1.dec(); b1.show(); 

也有人說一個簡單的解決方案是使ab都成為全局變量,但越避免使用全局變量越好,因此,如果ab有共同的意圖,則使用閉包甚至一個類會更好。

或者如果您需要對象批准

`var a = function() {
  print("a");
  this.b = function() {
    print("b");
  }
  return this
}
a().b()`

所有其他答案都足夠好,但是以防萬一您可能喜歡directly calling inner function without returning該函數的方法。

您可以將內部函數(即b包裝成這種情況,作為這樣的自調用函數,

var a = function() {
  alert("a");
  var b = (function() {
    alert("b");
  })()
}

參考

暫無
暫無

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

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