为了账号安全,请及时绑定邮箱和手机立即绑定

调用带参数的构造函数

调用带参数的构造函数

大话西游666 2021-11-18 09:30:54
我有一个无法修改的函数,我需要调用它,但我以前从未见过这样的东西。var myCategorize = function(z) {    return function(q) {      return 1;    } }('window'.indexOf('w') > 0 || window || false);我已经去掉了 function(q) 部分的一些代码,只是为了简化。我想我有一个咖喱函数,所以我试过这个: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?
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

myCategorize不是柯里化函数,它是实现模块模式的 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);


查看完整回答
反对 回复 2021-11-18
?
RISEBY

TA贡献1856条经验 获得超5个赞

添加括号时它已经调用了一次函数,所以它的值为myCategorize:


ƒ (q) {

  return 1;

}

然后你调用该函数,let category = myCategorize(bookTitles[i])其值为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');


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信