簡體   English   中英

帶參數調用構造函數 function

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM