繁体   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