bwin娱乐官网一道JS题目

2016/12 01 13:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于bwin娱乐官网的点点滴滴

for var i=1;i<=5;i++ {
                setTimeoutfunction{
                    console.logi
                },i*1000
            }
for循环语句是怎样运转的呢?为什么会输入5个6呢?

闭包,闭包,闭包的题目!

经过下面的代码,可以看出只定义了一个变量 i ,只要在循环里面赋值为1~5,循环终了后是 6
setTimeout中的代码是在循环之后实行的,以是输入的i是 6。而不是你所想的。
由于 i 只要一个,不行能同时便是 1,2,3,4,5.

可以改成(发起初理解下面一段代码,先不要纠结ES6的):

for var i=1;i<=5;i++ {
    function{
        var j = i;
        setTimeoutfunction{console.logj},
                    j*1000;
    };    
} 
\\ 或 ES6
for let i=1;i<=5;i++ {
    setTimeout=>console.logi,i*1000;
}

由于 setTimeout 是异步的啊,当你实行完 for 的时分,设定了 5个setTimeout,辨别耽误 1至5秒,
实行完 for后,i的值为 6,然后你会看到,每隔一秒输入1个6,一共5个

这是闭包题目,

  for var i=1;i<=5;i++ {
            setTimeouttesti,i*1000
        }

function testi{

console.logi

}

或许
for var i=1;i<=5;i++ {
            setTimeoutfunctionx{
                return function{
                    console.logx
                }
            }i,i*1000
        }

循环里面套函数都市发生这种闭包题目

这个题的重点在于, setTimeout是需求等到你的主次序实行流实行完了后才实行.

一末尾, 次序从for末尾实行, 遇到setTimeout的时分先不论, 持续今后实行, 不断实行到循环终了.
好了, setTimeout可以实行啦. 连续六个setTimeout打印出i, 而此时的i曾经是6啦.

这是由于js没有块级作用域形成的,而不是for循环的题目.

先看这个例子:

var i = 1;
{
  var i = 2;
}
console.logi;

输入的后果是:2.便是说{}中定义的变量i会代替{}里面的变量i,即没有块级作用域.

每实行一次就相称于实行了一次下面的代码,最后循环中的i是5,又实行了一次i++,以是变成了6;

判别以后i的值能否小于便是5,是的话就加1,由于你用了setTimeout,以是一秒后i的值曾经变成6了,再输入的话,就不断是6了

(看完/读完)这篇文章有何感想! 来看看bwin娱乐官网是怎么评论的吧!

--转载请注明: bwin娱乐官网_bwin娱乐官网平台_bwin娱乐官网平台下载 » bwin娱乐官网一道JS题目

发表评论

(必填)