>>> b() {return "aaa"} Function.prototype.c=function(){return b();}}
>>> a.c function( )
>>> a.c()
"aaa"
>>> a.hasOwnProperty("c")
false
参照 このコードでは、まず関数 a を宣言し、内部で関数 b を定義しています。ただし、関数 b は関数オブジェクト a のメソッドではなく、単なる一時変数関数 (またはプライベート関数、方法がわかりません) です。その後、関数 a ブロック内で関数 c が function(){} を使用して定義されたため、クロージャが生成され、c は a の下にあるブロックのすべての内部変数 (もちろん b も含む) を走査できるようになりました。 Function.prototype の下に c をリンクしました。つまり、a に直接リンクされませんが、a のプロトタイプチェーンにリンクされます。最終的に実行され、hasOwnProperty も false になり、
があります。 code
>>> {}; 関数 a(){関数 b(){return "aaa"} d.c=function(){return b();}}
>>> > d.c ()
"aaa"
closure は関数実行のコンテキストとは関係ありませんが、context は call apply メソッドを使用してこれを変更できます。関数が定義された後にクロージャを変更する方法はありません。そうかどうかはわかりません。