javascript - 调用带有参数的构造函数

标签 javascript function ecmascript-6

我有一个无法修改的函数,我需要调用它,但我以前没有见过这样的东西。

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/

相关文章:

javascript - 修改对象的 for...of 循环行为

javascript - Angular - Bootstrap : Page navigation (Next and back button) using Angular UI-route not working when changing the state from controller

javascript - 应该是交互式的功能,但它只能运行一次

javascript - 我可以将 JavaScript 函数存储在数组中吗?

PHP - 根据条件在类中声明函数

javascript - 如何传递扩展 React.Component 的类作为属性来渲染它(使用 babel)?

javascript - 使用 turn.js 垂直翻转

Javascript:按div内的内容对链接进行排序

javascript - 使用 angularjs 创建动态 json 矩阵

javascript - webpack watch 只看入口