[英]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.