簡體   English   中英

銷毀javascript函數的正確方法是什么?

[英]what's the correct way to destroy a javascript function?

我對面向對象的Javascript不太熟悉,但是可以說我有一個實例化的函數..?

那是正確的術語嗎?

該函數包含一個帶有附加事件偵聽器的XMLHttpRequest ,處置該函數的正確方法是什么?

function foo() {
    var self = this;
    self.message = "received response";
    self.url = 'someUrl';
    self.req = new XMLHttpRequest();
    self.req.open("POST", self.url, true);
    self.req.onload = function () {
        console.log(self.message); // Unable to get property 'message' of 
        // undefined or null reference
    };
    self.req.send();
    self = null;
}

var foo = new foo();

我意識到這不是我應該如何中止XMLHttpRequest而僅僅是一個示例,問題是我應該如何徹底銷毀一個函數以及它產生或創建的所有函數?

編輯

澄清一下,我對self.req.onload感到困惑,當self = null時,它怎么可能存在? 我的想法是self.req不再存在,因此它也發生了,但是事實並非如此

是的,JavaScript函數是對象,因此將它們實例化 輸入作用域時,函數聲明會創建一個函數,對它們進行求值時,函數聲明也會創建一個函數。

但是,在JavaScript中,您不會處理對象。 您只需讓它們超出范圍(刪除對它們的所有引用),然后垃圾收集器將照顧它們。 例如,當您foo.req.abort()請求或響應到達,並且foo.req.onload不再可訪問時,您的偵聽器函數將被垃圾回收。

我會這樣寫一個例子:

function foo () {
  var message = "received response";
  var url = 'someUrl';
  var req = new XMLHttpRequest();
  req.open("POST", url, true);
  req.onload = function () {
    console.log(message);
  };
  req.send();
}

// No need to instantiate foo, just call it when you want to make your request
// No need for foo to "remember" variables.

foo();

暫無
暫無

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

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