-
[上海|荣耀师兄]JS-王刚1
- -老哥你这书写顺序很有问题啊
首先你声明了一个全局变量。
var vacancy = []
然后在方法内又声明了一个同名的局部变量
function ranDomNum() {
for(i = 0;i < d; i++){
var vacancy = []; //同名变量!!
var d = 9;
var c = Math.round(Math.random()*(a.length));
var a = [0,1,2,3,4,5,6,7,8];
vacancy.push(a[c]);
a.splice(c,1);
}
return vacancy;
}
方法内的局部变量会覆盖全局变量,而且这个变量只有在函数体内是有效的,出了函数就没了。
而且- -你在for循环内声明同名的局部变量。
这代表每次循环都会将变量vacancy 的值改为空数组[]。
也就是说你这个数组vacancy在函数体内最后只有一个值。也就是最后循环获得的push添加的值。
- -还有你for循环 for(i = 0;i < d; i++) 使用了变量d- -、这里的d是undefined。因为for括号内和循环体{}内是两个作用域。所以就获取不到变量d
function ranDomNum() {
var vacancy =[];
var d = 9;
for(i = 0;i < d; i++){
var a = [0,1,2,3,4,5,6,7,8];
var c = Math.round(Math.random()*(a.length));
vacancy.push(a[c]);
a.splice(c,1);
};console.log(vacancy)
return vacancy;
}
改成这样就能获得一个随机数组了- -、
但是由于你用的是和全局变量的同名变量、所以全局变量vacancy这时候还是空[]。
所以调用函数的时候
var vacancy =ranDomNum() ;
就能获得值了。
这是因为你使用return 将局部变量做完这个函数的返回值了。
如果你要在方法内更改全局变量的话。
就需要将方法内的局部变量var vacancy =[];删掉
编辑于2018-12-08 -
[深圳|结业弟子]JS-李韬0编辑于2018-09-21
- 去第 页