Как передается аргумент этой именованной функции, вызываемой самому себе? - PullRequest
1 голос
/ 24 марта 2012

Добрый вечер,

Я пытался обернуться вокруг этого кода ниже, написанного Крисом Койером.

Я понимаю, что это самозванная функция с именем 'Support', но я не понимаю, как 'Support' передается аргумент (как показано ниже в разделе // Test). Может кто-нибудь объяснить это или указать мне правильное направление для дальнейшего чтения?

// 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');
}

Ответы [ 5 ]

3 голосов
/ 24 марта 2012

Давайте посмотрим, что такое 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') ) /* .... */

Это действительно не сложно, когда вы знаете, с чего начать.

1 голос
/ 24 марта 2012

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.

1 голос
/ 24 марта 2012

Самовозвратная функция возвращает функцию, которая принимает аргумент.

Итак, 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.

0 голосов
/ 24 марта 2012

переменная 'поддерживает' получает новую функцию, которую можно увидеть в строке

return function(prop) {
0 голосов
/ 24 марта 2012

Это самовозвратная функция , которая возвращает функцию .

supports назначается функции, которую возвращает самовозвратная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...