ホームページ  >  記事  >  ウェブフロントエンド  >  素晴らしい js_javascript のトリック

素晴らしい js_javascript のトリック

WBOY
WBOYオリジナル
2016-05-16 19:08:561031ブラウズ
コードをコピーします コードは次のとおりです。

>>> 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 メソッドを使用してこれを変更できます。関数が定義された後にクロージャを変更する方法はありません。そうかどうかはわかりません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。