[英]What does the following code mean??And how should I understand the syntax of the function body?
createFilter(queryString) {
return (restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
}
我想知道為什么第一個return
之后是另一個return
,並且符號=>
意味着什么? 我應該如何理解整個代碼?
=>
符號只是聲明函數的另一種方式。 這種類型的功能稱為箭頭功能 (或有時稱為lambda函數)。 例如, (restaurant) => {...}
可以重寫為:
function(restaurant) {...}
雖然它與箭頭功能不完全相同,但是它將幫助您了解代碼中正在發生的事情。 要了解箭頭函數和普通函數語法之間的核心區別,您可以閱讀此答案 。
至於代碼邏輯,如果您單獨查看內部函數,可能會更清楚地了解發生了什么:
(restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
這是一個接受restaurant
作為參數的函數。 然后,該函數使用restaurant
return
一次調用的值。 在這種情況下,返回值是布爾值。
如果要在x
上方調用整個函數,則整個代碼應類似於:
createFilter(queryString) {
return x;
}
在這里,很明顯函數createFilter
將接受參數queryString
,並返回x
,我們知道這是一個函數。
因此,如果我要調用createFilter("foo")
,它將給我函數x
,我們說的等效於:
(restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
因此,現在,我們知道x
是一個函數,我們可以將其稱為x("bar")
。 我們可以看到上面的函數將返回一個布爾值(因為它正在進行比較),因此調用x("bar")
將導致true
或false
。
因此,充分利用createFilter
函數將類似於:
let filter = createFilter("foo"); // returns a function (x), we can store the returned function in a variable called "filter"
let found = filter("bar"); // call the function stored in the variable filter
或者,通過刪除itermidiate變量,可以將其寫為一行:
let found = createFilter("foo")("bar");
// returns a function--^^^ ^^---- executes the returned function
(restaurant) => { }
是一個函數。 更具體地說,它是箭頭功能 。
歡迎來到SO。 聽起來您有很多JS閱讀要做。 代碼的作用: createFilter
返回一個函數( =>
是“箭頭函數”),該函數在調用時根據比較是否成立返回true
或false
。 比較是檢查queryString.toLowerCase()
匹配restaurant.value.toLowerCase()
的第一個字母(索引為0
indexOf
restaurant.value.toLowerCase()
。
因此,例如,您可以這樣稱呼它:
const myFilter = createFilter('A');
myFilter('Algerian Food'); // true
myFilter('Italian Food'); // false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.