簡體   English   中英

可以從ajax回調函數中查看父函數的變量嗎?

[英]can ajax callback function see variables from parent function?

function validateHistoryId(input) {
    $.getJSON('request.php', {"action": "historyExists", "history_id" : input.value},
              function(data) {
                  console.log(input.value);
              }
    );
}

我從javascript函數使用jQuery ajax調用。 我嘗試了上面的代碼並且它可以工作,但我不知道將來是否會引起任何問題。

我想知道,ajax回調函數可以看到它的父函數的變量嗎? 這樣做是不好的做法?

這是JavaScript功能性的做事方式。 它被稱為閉包:函數從其當前作用域和任何其他父作用域攜帶變量指針。 因此,這不僅是一種良好的做法,而且這是您應該遵循的模式,而不是推動參數對象等。

請注意,“this”引用是特殊的,它永遠不會關閉(與任何其他引用相對),因此始終將全局對象指向匿名函數。

事實上,開發人員需要一些時間來充分利用閉包功能 - 這是您剛才編寫的基本示例。 在更高級(而不僅僅是異步)方案中,閉包可以幫助您創建“即發即棄”行為,或者可以為您提供無法從客戶端代碼訪問的“私有”變量(對庫開發很有用)。 Closure還可以幫助您隔離代碼,使其不會混淆全局范圍。

1)示例:如何使用閉包創建受保護的變量。 您可以訪問兩個可以訪問“protectedVariable”的方法,但您無法自己訪問它 - 因此可以保證控制。

function protectedScope(initData) {
  var protectedVariable = initData;

  return {
    getter: function()  { return protectedVariable; }
    setter: function(v) { protectedVariable = v; }
  }
}

var methods = protectedScope(10);

console.log(methods.getter());

2)隔離:即使使用“全局”函數定義,下面的代碼也不會淹沒全局范圍

var API = (function() {
   var protectedVariable = 0;

   var myNotGlobalFunction() {
      return protectedVariable;
   }

   return myNotGlobalFunction;
})();

暫無
暫無

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

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