私はelementは一時的なデータの入れ物にすぎず、document.body.appendChild(element);の部分でデータを渡して実体を生成しているのかと思っていましたが、違うのですか?elementがグローバル変数でないところを見ると、変数が存在し続ける必要はないようですし。(=実体は別の場所にあり、データはそこに保存される)
element.setAttribute("id","comment"+i);
で識別するためのIDを付与して、別の場所で操作するときは
document.getElementById("comment"+i);
を使っているところを見ると、
document.body.appendChild()//実体を生成し、そこに引数の示すデータを保存する
↓
.setAttribute()であらかじめ決めておいた識別番号のようなものを
var hennsuu = document.getElementById()
の引数に指定して、変数のアドレスを取得して、その後はそのアドレスを使ってその変数を操作する。
(この場合のhennsuuはポインタの役割をしているのでは?)
Javascriptで扱う関数、配列などが全てオブジェクトで構成されているのはご存知ですよね。
また変数には数値や文字列などを扱う「普通の変数」(関数の引数などはコピーになる)
とメモリの何処かで構成されているオブジェクトを指し示す「参照型の変数」があります。
(これらはキャストなどによって明確に区別されるものではなく、代入されたデータによって変わります。)
参照型はC言語で言うポインタのようなものです。
ここでの、「document.createElement」関数は、
メモリ上にHTMLオブジェクト(ノード)を
作成し、「element」変数はそれを指す「参照型の変数」としての役割を持っています。
つまり、「document.createElement」関数が実行されたときにはオブジェクトの実体は存在しますが、
画面には反映されていないのです。
そこで、「appendChild」を使うことによって、DOMツリーへノードが追加され、実際に画面へ
反映されます。
つまり、MoNoQLoREATORさんの仰るようにオブジェクトの実体は別の場所に保存され、参照型変数はそれを指し示すものですが、HTMLオブジェクトは少々ややこしくて、DOMツリーへノードとして追加されないと画面に反映されないのです。おそらく別の体系なんでしょうね。
「setAttribute()」であらかじめ決めておいた識別番号のようなものを~
というのはどうなんでしょうね。
てっきり、ノードを全部検索してプロパティが一致したときにそれを返すものだと思ってたんですが・・・
これは良く分からないです。
「hennsuu」がポインタのような役割をしているのは確かです。
var hennsuu = document.createElement()がいくつ宣言されているかは関係なく、
.setAttribute()によって、個々を識別できるようになっていることと、
その数だけdocument.body.appendChild()が呼び出されていることが重要なのではないかということです。
「element」が参照型の変数である以上実体はひとつです。
「setAttribute()」によって属性が付加される対象は「element」の指すオブジェクトが変わらない限り同じままです。つまり、結局はひとつのノードに対して属性の更新が行われるだけになります。
上でも申し上げたのでくどいですが「appendChild」はノードの反映しか行わないので、既に反映されたノードに対して何度行っても意味がありません。
またまた、おかしな点ございましたらご指摘お願いします。
間違っているかもしれないので。
※蛇足
「document.getElementById()」等のメソッドは既に反映されたノードが対象で、
「setAttribute()」等のメソッドは反映の有無を問いません。
逆に「createTextNode()」等のメソッドは反映前のノードしか効果がない、など色々と仕様がありますね。