クローズドCloureとは何ですか?
2087 ワード
クローズドには関数という概念がありますが、表現の核心思想は同じです.たとえば:
言い方一:
クローズド関数:一つの関数の関数をクローズド関数と呼びます.
クローズド:内部関数は常に、その外部関数が返された後でも、その外部関数によって宣言されたパラメータと変数にアクセスできます.
言い方二:
簡単に言えば、クローズドとは、別の関数のスコープにアクセスできる変数の関数です.
MDNは上のように言います.クローズドは特殊な対象です.
二つの部分から構成されています.関数とその関数を作成する環境です.環境はクローズドパッケージ作成時のスコープ内の任意の局所変数から構成される.
このような公式概念は比較的に理解しにくいので、面接の時に話してもあまり専門的ではないです.具体的な論理ができないからです.
個人的には、クローズドの理解の鍵は外部関数の呼び出し後、変数のオブジェクトは破壊されるべきですが、クローズドの存在は、外部関数の変数オブジェクトにアクセスすることができます.これがクローズドの重要な概念です.
閉包とは何ですか?
実は上の二つの言い方は一つの意味です.一つの関数Aはもう一つの関数Bの局所変数にアクセスできます.他の関数Bが実行されても大丈夫です.私は今このような条件を満たす関数Aをクローズドと言います.
クローズド存在の価値と意味?
クローズドバックを適用する主な場合は、プライベートを設計する方法と変数です.
関数で定義された変数は、関数の外部でこれらの変数にアクセスできないので、プライベート変数と見なされます.プライベート変数は、関数のパラメータ、局所変数、関数内で定義される他の関数を含みます.
プライベート変数にアクセスする権限のある共有方法を特権方法といいます.
関数名と関数機能範囲を分けるには、関数のthisは、誰がこの関数を呼び出したかを表しています.JSの関数のグローバル呼び出しはwindowです.
JSの中で閉包するのはとても重要な概念です.次の二つの文章を見てください.
面接官は私に聞きました.JavaScriptとは何ですか?どう答えたらいいですか?
閉じて、この1篇を見れば十分です.閉じたカバンの本質を見抜き、百発百中です.
kotlinにもCloosureの概念が導入されています.現在のところ、ほぼクローズドされているのが特徴です.
外部関数が実行されるたびに、外部関数の参照アドレスが異なります.新しいアドレスが作成されます.
外部関数を呼び出すたびに、「新しいオブジェクト」があります.それらは互いに干渉しないということを理解します.
言い方一:
クローズド関数:一つの関数の関数をクローズド関数と呼びます.
クローズド:内部関数は常に、その外部関数が返された後でも、その外部関数によって宣言されたパラメータと変数にアクセスできます.
言い方二:
簡単に言えば、クローズドとは、別の関数のスコープにアクセスできる変数の関数です.
MDNは上のように言います.クローズドは特殊な対象です.
二つの部分から構成されています.関数とその関数を作成する環境です.環境はクローズドパッケージ作成時のスコープ内の任意の局所変数から構成される.
このような公式概念は比較的に理解しにくいので、面接の時に話してもあまり専門的ではないです.具体的な論理ができないからです.
個人的には、クローズドの理解の鍵は外部関数の呼び出し後、変数のオブジェクトは破壊されるべきですが、クローズドの存在は、外部関数の変数オブジェクトにアクセスすることができます.これがクローズドの重要な概念です.
閉包とは何ですか?
実は上の二つの言い方は一つの意味です.一つの関数Aはもう一つの関数Bの局所変数にアクセスできます.他の関数Bが実行されても大丈夫です.私は今このような条件を満たす関数Aをクローズドと言います.
クローズド存在の価値と意味?
クローズドバックを適用する主な場合は、プライベートを設計する方法と変数です.
関数で定義された変数は、関数の外部でこれらの変数にアクセスできないので、プライベート変数と見なされます.プライベート変数は、関数のパラメータ、局所変数、関数内で定義される他の関数を含みます.
プライベート変数にアクセスする権限のある共有方法を特権方法といいます.
関数名と関数機能範囲を分けるには、関数のthisは、誰がこの関数を呼び出したかを表しています.JSの関数のグローバル呼び出しはwindowです.
JSの中で閉包するのはとても重要な概念です.次の二つの文章を見てください.
面接官は私に聞きました.JavaScriptとは何ですか?どう答えたらいいですか?
閉じて、この1篇を見れば十分です.閉じたカバンの本質を見抜き、百発百中です.
kotlinにもCloosureの概念が導入されています.現在のところ、ほぼクローズドされているのが特徴です.
外部関数が実行されるたびに、外部関数の参照アドレスが異なります.新しいアドレスが作成されます.
外部関数を呼び出すたびに、「新しいオブジェクト」があります.それらは互いに干渉しないということを理解します.
fun closureOuter(x : Int) : (Int) -> Int {
var a = 3
// return fun (y : Int) : Int {
// a++
// return a + x + y
// }
return {y ->
a++
a + x + y
}
}
var closureInner0 = closureOuter(3)
var closureInner1 = closureOuter(13)
println(closureInner0(3))
println(closureInner0(3))
println(closureInner1(3))
println(closureInner1(3))
kotlinのクローズドとjsはまだ少し違っています.下のコードを見てください.kotlinはこのように書くのが正しいです.jsはこのように書くのが間違いです.jsはもう一つの関数を作って呼び出します. fun fn(): Array Unit)?>{
var arr = arrayOfNulls Unit>(10)
for (i in 0..9) {
arr[i] = fun () {
println(i)
}
}
return arr
}
var arr1 = fn()
for (item in arr1) {
item?.invoke()
}