私はスコープ、特にクロージャーに頭を悩ませようとしてきました。このトピックに関する投稿がたくさんあることを知っており、たくさん読んでいます。しかし、ほとんどの場所では、このトピックを高度なトピックと呼んでおり、比較的理解しにくい用語を使用しています。関数が実際にどのように機能するかについて間違った考えを持って、より複雑なトピックに踏み込むことがないように、基本を正しく理解していることを絶対に確認したいと思います。
だから...私は基本的な機能を選びました.ボンネットの下で起こっていると思うことが実際に起こっていることであるかどうか誰かに教えてもらいたいです.
これはコードです:
function sum(a) {
return function(b) {
return a+b
}
}
console.log( sum(1)(sum(2)))
(実際には合計を行うわけではないことを知っています。各ステップで何が起こっているのかを理解しようとするために微調整しました。)
したがって、私の主な疑問は、なぜ A が 2 ではなく 1 であったかということでした。によって返された直後に、引数としてfunction(b)
取るために が作成されるとすぐに、クロージャーが作成されるという結論に達しました。したがって、クロージャーの定義により、関数が作成された時点で、レキシカル環境も保存されると想定しています ( where )。これは正しいですか?sum(2)
sum(1)
a = 1
手順を図にしました。