遇到一个诡异的东西啊

P15215022063 2013-01-06 06:24:21
遇到一个好诡异的东西,函数里面居然把外面的变量给影响了

$(document).ready(function(){
var tu = Array(8);
tu[1] = "img/pt/s/1.jpg";
tu[2] = "img/pt/s/2.jpg";
tu[3] = "img/pt/s/3.jpg";
tu[4] = "img/pt/s/4.jpg";
tu[5] = "img/pt/s/5.jpg";
tu[6] = "img/pt/s/6.jpg";
tu[7] = "img/pt/s/7.jpg";
tu[8] = "img/pt/s/8.jpg";
tu[0] = "img/pt/bai.png";

/*上面是一个 tu 数组 ,然后我想得到一个新的数组,数组的的内容是打乱了的 tu ,但要保证 tu 还是不变,于是我用了这个函数*/
$.randArray=function(arr0){
var arr1=new Array();
var len=arr0.length;
for(var i=0;i<len;i++){
var rnd=Math.floor(Math.random()*arr0.length);
arr1[i]=arr0[rnd];
arr0.splice(rnd,1);
}
return arr1;
}

alert(tu);/*这个时候,输出 tu 正常*/

var tu2=$.randArray(tu);

alert(tu);/*这个时候,输出 tu 就空白了*/

});



上面就是完整的代码了,描述也有一些
后来我到处放alert()来进行排查,发现是在经过函数里面的
arr0.splice(rnd,1);
的时候,tu 的值发生变化的。

这个就诡异了啊,函数内部是对形参 arr0 进行操作的,怎么把tu给操作了
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸡肋啊 2013-01-07
  • 打赏
  • 举报
回复
这个不是很正常的么,不诡异啊; var tu2=$.randArray(tu); 这个执行完后被arr0.splice(rnd,1)这句把tu数组都删除了;再次输出tu当然就是空了
cstbuctlz 2013-01-07
  • 打赏
  • 举报
回复
引用 6 楼 P15215022063 的回复:
引用 3 楼 plzzz 的回复:javascript的数据类型除了 数字,字符串,Boolean,undefined,null..这些简单变量,其它的都属于复杂变量,复杂变量在赋值时返回的是一个变量引用,而传参会传一个**引用副本**,而非真实对象本身, 这样的啊。。。。。,知道啦
真正的原因还是这里:arr0.splice(rnd,1);splice() 方法会直接对原数组进行修改。而传进来的参数如果是引用,将会修改对象本身。
P15215022063 2013-01-06
  • 打赏
  • 举报
回复
引用 3 楼 plzzz 的回复:
javascript的数据类型除了 数字,字符串,Boolean,undefined,null..这些简单变量,其它的都属于复杂变量,复杂变量在赋值时返回的是一个变量引用,而传参会传一个**引用副本**,而非真实对象本身,
这样的啊。。。。。,知道啦
P15215022063 2013-01-06
  • 打赏
  • 举报
回复
引用 4 楼 P15215022063 的回复:
我自己找到原因了 arr0=arr0.splice(rnd,1); 应该这里
还是不对
P15215022063 2013-01-06
  • 打赏
  • 举报
回复
我自己找到原因了 arr0=arr0.splice(rnd,1); 应该这里
plzzz 2013-01-06
  • 打赏
  • 举报
回复
javascript的数据类型除了 数字,字符串,Boolean,undefined,null..这些简单变量,其它的都属于复杂变量,复杂变量在赋值时返回的是一个变量引用,而传参会传一个**引用副本**,而非真实对象本身,
P15215022063 2013-01-06
  • 打赏
  • 举报
回复
引用 1 楼 dongvsning 的回复:
var tu = Array(8); 你声明了8个长度的数组, 下面赋值却写了9个。
不不,这个不是关键 改成 9还是一样的
  • 打赏
  • 举报
回复
var tu = Array(8); 你声明了8个长度的数组, 下面赋值却写了9个。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧