解决方案 »
- ajax解析xml,多条数据,只读取了一条,求大神解释
- 求教:如何用java script对一个平面图进行放大缩小,带有测距功能
- 急!IE7中window.open弹出窗口最小宽度问题!!
- 急!急!急!哪位大侠帮忙看看这段程序(关于限制输入日期不大于当前日期)?
- IE中的脚本代码如何知道自己所处的<SCRIPT>对象?
- 请问:对象server怎么声明???
- 想在window.close()事件中作点其他的事情,如何捕捉close()事件。怎样处理呢?
- 请教各位高手,本人不才,请问怎样在点击超链接之后,打开的窗口没有菜单、没有状态栏、没有常用工具、地址栏?(急盼急盼,在线等待)
- 数组问题?
- netscape中改变表格背景色怎么做?IE下的代码不管用
- 一个关于JS执行顺序的问题
- 关于如何自己匹配分辨率定位的js
此时i=10; for (var j = 1; j <= i; j++) { 执行了10*10=100次,每次输出“汪汪”
2、var dog = function () {
return '汪';
};
var cat = function () {
return '喵';
};(function () {
if (cat() === '喵喵') {
dog = function () {
return '汪汪';
}
} function cat() {
return '喵喵';
}
})();
var count=0,i=0,j=0;
function callDog(){
if ( i < 10 ) {
j++;
if(j > i){j=1;i++}
count++;
console.log(count +"--"+dog());
setTimeout(callDog,1000);
}
}
callDog();
for (var i = 0; i < 10; i++) {
(function(i){
setTimeout(function () {
for (var j = 1; j <= i; j++) {
console.log('第 '+i+' 次输出 '+dog()+i+' 次');
}
},1000 * i)
})(i);
}
2. 不要for循环,让i在setTimeout自调用当中递增
实际上就是考你对闭包的了解。
for循环执行完成之后,i的值就是其最后一次执行的值+1,虽然定义的是在for中,但是依然在全局中能够使用,所以你后边使用i的值时,都是最后一次执行for的值+1即是:10
实际上就是考你对闭包的了解。
for循环执行完成之后,i的值就是其最后一次执行的值+1,虽然定义的是在for中,但是依然在全局中能够使用,所以你后边使用i的值时,都是最后一次执行for的值+1即是:10
大神你好,能留个QQ么?有技术问题的话我想和你交流。
setTimeout(function () {
for (var j = 1; j <= i; j++) {
console.log(dog());
}
},
1000 * i);
}
执行顺序,先执行外层的for循环10次,然后i=9
settimeout有延迟,所以里面的 j<=i 这里的i在第一次执行的时候就是9
里面的for循环也是执行了10次
嵌套下来就执行了100次。
for (var i = 0; i < 10; i++) {
(function(i){
setTimeout(function () {
for (var j = 1; j <= i; j++) {
console.log('第 '+i+' 次输出 '+dog()+i+' 次');
}
},1000 * i)
})(i);
}
这种形式i没有被释放,传入里面for循环的时候,就是 0,1,2,3,4,5,6,7,8,9
延迟分别为1000 2000 3000....9000
所以延迟0秒执行一次,1秒执行一次9秒执行一次~
for(var i=0; i<10; i++)
{
setTimeout(function(i)
{
console.log(i);
for(var j=1; j<=i; j++)
{
sum++;
console.log("第"+sum+"次"+dog());
}
}(i), 1000*i);
}
这样也是可以的。