奇妙なjs

1012 ワード


>>> function a(){function b(){return "aaa"} Function.prototype.c=function(){return b();}}    
>>> a()    
>>> a.c    
function()    
>>> a.c()    
"aaa"   
>>> a.hasOwnProperty("c")    
false 
はこのコードを見て、まず関数aを宣言し、内部に関数bを定義しましたが、関数bは関数オブジェクトaの方法ではなく、関数aブロックの中の一時変数関数(またはプライベート関数はどのように説明すればいいのか分かりません。)だけで、後にもう一つの関数cがfunction()でaの内部で定義されています。したがって、closureが生成されますので、cはaの下のすべてのブロックの内部変数を遍歴することができます。もちろんbを含みます。また、cをFuntions.prototypeの下に掛けました。直接にaの下に掛けるのではなく、aの原形チェーンに引っ掛かって、最後に実行しました。  コード

>>> d={};    
Object    
>>> function a(){function b(){return "aaa"} d.c=function(){return b();}}    
>>> a()    
>>> d.c()    
"aaa"   
closureと関数の実行するcontextは少しも関係がなくて、contextはcallを使うことができます。 apply方法はthisを変えますが、closureはfunctionで定義した後、修正できないようです。そうですか?