私はjavascriptを読んでいます:Douglas Crockfordによる良い部分。特定の例と著者が提供する説明を理解するのに苦労しています。
例 1: (38 ページ)
var quo=function (status) {
return {
get_status:function() {
return status;
}
};
};
var myQuo=quo("amazed");
document.writeln(myQuo.get_status());
本からの説明(私はこれを理解していません。この部分を説明してください):
この quo 関数はnewプレフィックスなしで使用するように設計されているため、名前は大文字ではありません。quo を呼び出すと、get_status メソッドを含む新しいオブジェクトが返されます。そのオブジェクトへの参照は myQuo に保存されます。get_status メソッドは、quo が既に返されていても、quo の status プロパティへの特権アクセスを引き続き持っています。get_status は、パラメーターのコピーにアクセスできません。パラメータ自体にアクセスできます。これが可能なのは、関数が作成されたコンテキストにアクセスできるためです。これを閉鎖と呼びます。
例 2 (39 ページ):
//make a function that assigns event handler function to array of nodes
//when you click on a node, an alert box will display the ordinal of the node
var add_the_handlers=function (nodes) {
var helper=function(i) {
return function(e) {
alert(i);
}
};
var i;
for (i=0;i<nodes.length;i++) {
nodes[i].onclick=helper(i);
}
};
このコードがどのように機能するか、さらにはどのような機能(e)が機能するかを理解するのが困難です? ヘルパー関数が関数を返し、その関数が何も返さない理由。それは私にとって非常に紛らわしいです。誰かが簡単な言葉で説明できるなら、それは非常に役に立ちます。どうもありがとう
EDIT:
According to the book is the bad example for the above(example 2):
var add_the_handlers=function(nodes) {
var i;
for (i=0;i<nodes.length;i++) {
nodes[i].onclick=function(e) {
alert(i);
};
}
};
これは常にノード数を表示するため、著者はこれを悪い例として挙げています。