内部的に再定義された Javascript 関数の動作の違い
P粉805931281
P粉805931281 2024-01-10 18:01:18
0
1
481

JavaScript コードをリバース エンジニアリングしていたときに、次の関数を見つけました:

リーリー

私にとって、それは冗長に見えます。コードは次のようです:

  1. 配列 arr を宣言します。
  2. 関数内で関数を再定義して、arr を返すようにします。
  3. return fun1() を使用すると関数自体の結果が返されますが、この関数は arr を返すように再定義されているため、arr を返すように見えます。

そこで、すべての冗長コードを削除するために関数を書き直しました。 リーリー

しかし、

2 つの関数の動作がまったく異なることに驚きました。

fun1()arr への参照を返すように見えますが、fun2()arr のコピーを返すように見えます。

これは、違いを説明するための最小限の再現可能な実行可能な例です:

リーリー

魔法が起こったようです...

fun1()fun2() の違いは何ですか?

P粉805931281
P粉805931281

全員に返信(1)
P粉101708623

最初に呼び出されたとき、fun1() 関数 は、(比較的) グローバルな fun1 シンボル を再定義します。元の関数を、配列を囲むローカル内部関数に変更します。したがって、関与する配列は 1 つだけで、最初に fun1() が呼び出されたときに作成されます。

一方、fun2() は呼び出しごとにまったく新しい配列を作成します。

内部関数が ローカルで宣言された fun1 変数に割り当てられるように fun1() を変更すると、 と同じになります。 fun2( ) も同様に機能します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート