簡體   English   中英

如何將這個命名的自調用函數傳遞給參數?

[英]How is this named self-invoked function being passed an argument?

晚上好,

下面,我一直在努力思考克里斯·科耶(Chris Coyer)編寫的代碼。

我知道這是一個名為'supports'的自調用函數,但是我不了解的是'supports'是如何傳遞參數的(如下面//測試部分所示)。 請有人可以解釋一下,或指出正確的方向以供進一步閱讀嗎?

// Generic Testing Function
var supports = (function() {
   var div     = document.createElement('div'),
       vendors = 'Khtml Ms O Moz Webkit'.split(' '),
       len     = vendors.length;  

    return function(prop) {
      if ( prop in div.style ) return true;  

      prop = prop.replace(/^[a-z]/, function(val) {
         return val.toUpperCase();
      });  

      while(len--) {
         if ( vendors[len] + prop in div.style ) {
            return true;
         }
      }
      return false;
   };
})();  

// Test
if ( supports('flowInto') ) {
   $("html").addClass('cssregions');
} else {
   $("html").addClass('no-cssregions');
}

讓我們看看supports是:

var supports = (function() {
    /* ... */
})();

好的,因此supports是當場調用的匿名函數的返回值。 這個匿名函數返回什么?

    return function(prop) {
      if ( prop in div.style ) return true;  

      prop = prop.replace(/^[a-z]/, function(val) {
         return val.toUpperCase();
      });  

      while(len--) {
         if ( vendors[len] + prop in div.style ) {
            return true;
         }
      }
      return false;
   };

好的,因此此函數的返回值(即我們上面所說的support擁有的值)實際上是一個帶有一個參數( prop的函數

因此,在這一點上,應該很清楚,執行測試部分的工作是完全合乎邏輯的,即調用該函數:

if ( supports('flowInto') ) /* .... */

當您知道從哪里開始時,實際上並不復雜。

自調用函數正在返回一個接受參數的函數。

因此,SIF被執行並返回

return function(prop) {
  if ( prop in div.style ) return true;  

  prop = prop.replace(/^[a-z]/, function(val) {
     return val.toUpperCase();
  });  

  while(len--) {
     if ( vendors[len] + prop in div.style ) {
        return true;
     }
  }
  return false;
};

這個家伙在這里。 並且此函數引用存儲在supports變量中。

supports是匿名自調用函數(此函數)返回的函數:

function(prop) {
    if (prop in div.style) return true;
    prop = prop.replace(/^[a-z]/, function(val) {
        return val.toUpperCase();
    });
    while (len--) {
        if (vendors[len] + prop in div.style) {
            return true;
        }
    }
    return false;
};​

因此,有問題的參數傳遞會傳遞prop參數。

那是一個自調用函數,返回一個函數

supports分配給自動調用功能返回的功能。

變量“ supports”正在接收新功能,可以在行中看到

return function(prop) {

暫無
暫無

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

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