簡體   English   中英

閉包緩存變量?

[英]Closure caches a variable?

我的代碼有問題,但是我找不到它。 我第一次調用registerStartDateValidation時,defineKeyword閉包中的startDateValidation變量的值當然與在閉包外受影響的值相同。 但是第二次,該變量又受到另一個值的影響,但是defineKeyword中的startDateValidation的值仍然等於我們第一次調用registerStartDateValidation的值。 閉包是否緩存變量?

Tv4.prototype.registerStartDateValidation = function (attributes) {
    var helper = this;
    var dateNames = Object.keys(attributes);
    var startDateName = dateNames[0];
    var startDateString = attributes[startDateName];
    var endDateName = dateNames[1];
    var endDateString = attributes[endDateName];
    var startDateValidation = helper.startDateValidation(startDateString, startDateName, endDateString, endDateName);

    console.log(startDateValidation)//First time equal "true", second time equal "false"

    tv4.defineKeyword('startDate', function (data, value) {
        if (value === 'startDate') {
            console.log(startDateValidation)//First time equal "true", second time still equal "true"
            return startDateValidation
        }
    });

};

請注意,沒有任何內容可以發出ajax請求,這可能會弄亂函數的調用順序。

簡短的答案:不,閉包不會緩存變量,因此代碼中還有其他情況。 將問題簡化為一個簡單的完整示例來說明問題,通常可以使問題變得很明顯,或者至少可以幫助其他人找出問題。

但是,由於您所指的似乎是該項目 ,因此有可能弄清楚發生了什么。 如果同一關鍵字多次被調用, Tv4.defineKeyword()會將新函數添加到列表中。 既然你打電話tv4.defineKeyword (注意小寫的“T”),而不是helper.defineKeywordthis.defineKeyword ,它看起來像每次調用registerStartDateValidation會影響到同一個實例,所以你幾乎可以肯定驗證功能當您打算更換它時。

暫無
暫無

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

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