[英]Calling a constructor function with parameters
我有一個無法修改的 function,我需要調用它,但我以前從未見過這樣的東西。
var myCategorize = function(z) {
return function(q) {
return 1;
}
}('window'.indexOf('w') > 0 || window || false);
為了簡化,我已經刪除了 function(q) 部分中的一些代碼。
我想我有一個咖喱 function,所以我嘗試了這個:
let category = myCategorize(bookTitles[i])(categories);
但是當我這樣做時,我收到以下錯誤:
Uncaught TypeError: myCategorize(...) is not a function
所以也許這是一個匿名構造函數 function,所以我嘗試這樣的事情:
let category = function(){myCategorize(bookTitles[i])(categories)};
console.log(category.apply());
我犯了同樣的錯誤。 如何調用這個 function 並獲得返回值 1?
myCategorize
不是柯里化的 function,它是實現模塊模式的 IIFE。 最后一行末尾的括號執行頂級function(z)
:
var myCategorize = function(z) {
return function(q) {
return 1;
}
}('window'.indexOf('w') > 0 || window || false);
//^--------------------------------------------^
並傳入z
的值。 如果我重寫它以添加額外的括號和名稱位會更清楚:
var myCategorize = (function outer(z) {
//start of outer --^
return function inner(q) {
return 1;
}
})('window'.indexOf('w') > 0 || window || false);
//^-- end of outer
所以你分配給myCategorize
的只是inner
。 要執行它,只需添加括號和一個參數:
var myCategorize = function(z) { return function(q) { return 1; } }('window'.indexOf('w') > 0 || window || false); console.log("myCategorize", myCategorize); var executionResult = myCategorize("foo"); console.log("executionResult", executionResult);
添加括號時已經調用了一次 function,所以myCategorize
的值為:
ƒ (q) {
return 1;
}
然后你用let category = myCategorize(bookTitles[i])
調用 function 並且category
的值為: 1
所以,相當於let category = myCategorize(bookTitles[i])(categories);
是
let category = 1(categories);
拋出該錯誤
var myCategorize = function(z) { return function(q) { return 1; } }('window'.indexOf('w') > 0 || window || false); let category = myCategorize('x'); // 1 console.log(category); let category2 = myCategorize('x')('y'); // throws, equovalent to 1('y');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.