var index = [];
index[0] = Math.floor(Math.random()*4);
while(index.length<4){
var num = Math.floor(Math.random()*4);
for(var i=0; i<index.length; i++){
if(index[i]==num){
break;
}
}
if(i==index.length){
index[index.length] = num;
}
}
首先,i不是定义在for循环中吗,为什么能直接在第二个if中应用;
其次,index[0]=x的意思是数组第一个值是x吗?这时候是不是index.length为1,
那index[4]=3是不是说明数组的第5个值为3,并且自动赋予了数组5个值
最后,整个while循环有些看不懂,望解析一下(随机取0到3之间的值我还是明白的)
第一遍循环,i=0,这样index[index.length],这个就是index[1],相当于数组length=2了,再次循环,到index[index.length]时,数组长度=3了,直到length=4,退出循环
第一,var i只是在内部循环中的局部变量,无法作用于where,index[0]=x是把x的值赋给index[0]中。index.length是固定的,表示数组的长度
根据你的while条件 你的数组长度最多为3呢
这个写法没有报错吗 而且数组的长度最多为3,这种写法是为了实现什么功能,把数组的1 2 3赋值1 2 3吗,可以简单的写啊。
你的I变量只是定义在For循环中 ,你在外面引用肯定引用不了
index[0]=x就是把x赋予给你index数组的第一个值,index[index.length]=x应该走不通吧,要是想把x赋值给index数组的最后一个值得话,应该是index[index.length-1]=x;再就是i写在for循环外面,有点没读通,不是语法错误吗?
index[0]=x就是给数组的第一个元素赋值为x,i是肯定要放在for循环里面的,我们看这段代码也知道for循环里面什么都没做,符合index[i]==num这个条件就 break,怕只有陈独秀先生可以写出这样的代码
for循环不是函数,所有i的值在for循环外也能作用,比如for(var i=0; i<4; i++){},for循环外,i=4
i只是在内部循环中的局部变量,无法作用于where,index[0]=x是把x的值赋给index[0]中。index.length是固定的,表示数组的长度
js 是动态语言,弱类型,声明变量通用var可以看出,不要用常规严谨语言来等同js语法,
一本js权威指南就有1000多页,可想js看起来简单却又很不简单
楼主第一个问题:首先,i不是定义在for循环中吗,为什么能直接在第二个if中应用?
js有一个很重要的特性,变量只有函数作用域,没有块级作用域(常见for、if、while等),举个例子
var name="qingtian";
if(true){
var name="xiaoxiao";
alert(name) ;
}
alert(name);
你会发现两次alert的结果都是"xiaoxiao"
如果有块级作用域,明显if语句将创建局部变量name,并不会修改全局name,可是没有这样,所以Js没有块级作用域
再看这段代码,去掉全局变量name声明
if(true){
var name="xiaoxiao";
alert(name) ;
}
alert(name);
你会发现两次alert的结果仍是"xiaoxiao",为什么最后一个alert不报name未定义?说明js变量就有函数作用域的,
这里就解答了楼主的第一个问题
楼主第二个问题:其次,index[0]=x的意思是数组第一个值是x吗?这时候是不是index.length为1,
那index[4]=3是不是说明数组的第5个值为3,并且自动赋予了数组5个值
js很随意,数组 var index = []; 这就创建好了,不想java还得声明大小
index[0]=x的意思是给index数组第一个位置赋值x,在没有声明数组大小的前提下,index.length为1
index[4]=3 的意思是给index数组的第五个位置赋值3,有没有自动赋予了数组5个值,看下这段代码
var index = [];
index[0] = 0
index[4] = 4;
alert(index[3]);
alert(index[4]);
第一个alert结果是undefined,第二alert结果是4,显然index[4] = 4再赋值同时声明了大小,为赋值的位置都是undefined
楼主第三个问题:整个while循环有些看不懂,望解析一下
Math.random():从0到1取随机数
Math.floor(x):向下取整,Math.floor(5.8)结果是5;Math.floor(-5.8)结果是-6
前两个问题及这个函数搞明白后,我觉得整段代码没啥好解析了,while循环次数取决于你的随机数的值,剩下的就是赋值及逻辑判断
你这错误有点多
1、你的if条件可能是写在for里面的;
2、index[0]=x表示index这个数组的第一个元素的值等于x;
3、index[4]=3,你的这个语句里是不会出现index[4]的,首先你的while(index.length<4)表示,只会有0、1、2、3,当然这一切的前提都是你这是数字数组哈;
第一:i定义在for循环中,所以for循环中肯定能用啊,for循环外是不能用的;
第二:是;
第三:是说明第5个数是3,但是,不会自动赋予数组5个值,只有最后一个赋值了,其他都是undefined;
第四:整个循环我觉得就是捕捉随机数(其实我也觉得有点绕脑)
第一个 js 是没有局部变量的 一旦初始化 在哪里都能访问 没有初始化是undefined 除非是object里面的属性才可以算是局部
你黏贴到 html里面 运行 ,看每一步结果就明白了
Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分)。切记,是function块,而for、while、if块并不是作用域的划分标准,楼主的代码没错,楼主的代码类似于 while(true){ var j = 1; break; } alert(j) 打出来是1,【虽然j已经在while scope以外了】
前端的数据类型 都是用 var表示 你前面的循环中 i 不加var 也是对的 所以第二个i不是同一个 所以你写错了 .length长度 你只有一个 是1
一个是作用域的问题,这个为什么不报红,我也不知道,也不知道,你其他地方有没有定义,正常情况下,不定义一个变量就使用,会报错的,超出这个作用域也是会报错的;可以debugger一下子看看原因;