我有一个无法修改的函数,我需要调用它,但我以前没有见过这样的东西。
var myCategorize = function(z) {
return function(q) {
return 1;
}
}('window'.indexOf('w') > 0 || window || false);
为了简化,我删除了 function(q) 部分中的一些代码。
我想我有一个柯里化(Currying)函数,所以我尝试了这个:
let category = myCategorize(bookTitles[i])(categories);
但是当我这样做时,我收到以下错误:
Uncaught TypeError: myCategorize(...) is not a function
所以也许这是一个匿名构造函数,所以我尝试这样的事情:
let category = function(){myCategorize(bookTitles[i])(categories)};
console.log(category.apply());
我遇到了同样的错误。如何调用这个函数并获得返回值1?
最佳答案
myCategorize
不是柯里化(Currying)函数,它是实现模块模式的 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);
关于javascript - 调用带有参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345841/