web-dev-qa-db-ja.com

java-script arrow関数は(x ++、x)を返します

私はコードがどのように機能するかわかりません:const countFrom = x => () => (x++, x); from here 、動作:

const countFrom = x => () => (x++, x);
let a = countFrom(1)

console.log('output:', a()) // output: 2
console.log('output:', a()) // output: 3
console.log('output:', a()) // output: 4
console.log('output:', a()) // output: 5
.as-console-wrapper {min-height: 100%!important; top: 0;}
9
//const countFrom = x => () => (x++, x);
//Lets refactor the code a bit:

function countFrom(x){
return function(){
x++;
return x;
}
}

let a = countFrom(1)
//now a is the returned function at line 5, and x is stored as a local variable.
console.log('output:', a()) // output: 2 you call the function at line 5 so it adds 1 to x and returns it
.as-console-wrapper {min-height: 100%!important; top: 0;}
1
Ufuk

いくつかの側面を理解していれば、それは非常に簡単です。

  1. 1つだけでなく、最初の行に2つの関数があります。最初の関数は2番目の関数_()=> (x++,x)_を返します(closureが何であるかを参照)
  2. 丸括弧の中にコンマ演算子があり、ステートメントの結果はコンマ演算子の最後のオペランド(ここではx)です。
  3. 角括弧は_return x_のように機能します。つまり、=> (x)は_=> return x_と同じです
0
Maciek Leks