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