测试如下: .my_show_textarea { width:600px; height:150px; font-family:"Courier New", Courier, monospace; overflow:auto; border:1px solid #ccc; font-size:11px;} .my_show_button{ font-family:"微软雅黑",Arial, Helvetica, sans-serif } 数组类型测试 Object类型测试 实例化函数测试 函数参数按地址传递测试 var a=b=[1,2]; a.push(3); alert(a.length+' : '+b.length); function $id(elem){return document.getElementById(elem);} var my_select=$id("my_show_select"); var my_textarea=$id("my_show_textarea"); var my_button=$id("my_show_button"); my_select.onchange=function(){ var value=this.value; var array=[]; switch(value){ case '1': array.push('var a=b=[1,2]'); array.push('a.push(3)'); array.push("alert(a.length+' : '+b.length)"); break; case '2': array.push("var a=b=new Object()"); array.push("a.show=function(){alert('a: I am a')};"); array.push("b.show=function(){alert('b: I am b')}"); array.push("a.show(); b.show()"); array.push("alert('事实上我调用了两个不同函数')"); break; case '3': array.push("var a=function(){alert('a说:函数本身并不具有相互引用特性,虽然他也是Function的实例');}"); array.push("var c=new a();"); array.push("var b=c;"); array.push("b.show=function(){alert('b: I am b');}"); array.push("c.show=function(){alert('c: I am c');}"); array.push("b.show();c.show()"); array.push("alert('事实上我调用了两个不同函数')"); break; case '4': array.push("var a=[1,2]"); array.push("var b=function(arg){\nvar c=arg;\nc.push(3);\nalert(c.length);}"); array.push("b(a);"); array.push("alert('事实上参数a在函数b中被修改了')"); } my_textarea.value=array.join(";\n"); }; my_button.onclick=function(){ eval(my_textarea.value); }; 关于对节点对象操作产生的影响: 由于是函数是按值传递,所以在插入节点时,引用的是节点本身,而不是它的一个克隆,所以节点被转移了 如: