zoukankan      html  css  js  c++  java
  • javascript之面试for循环

    今天去面试,答题时竟然犯晕。上题:

    for (var i = 0; i < 5; i++) {
        setTimeout(function(){
            console.log(i)
        },1000);    
    };

    我竟然填了,12345。真想去屎。然而真正的答案是,5 个 5。究其原因:for循环执行是很快的。远在定时器的时间到之前,for循环就已经执行完了。然而我今天。。。

    以上。

    还有一题,虽然有些明白了,但还是有些费解的。上题:

    for (var i = 0; i < 5; i++) {
        setTimeout(function(){
            console.log(i);
        },(function(){
            var b = i*1000;
            console.log(b);
            return b;
        })())
    };

    浏览器执行后,0到4000很快输出了,然而输出 5 时,却是1s 输出一个。为什么呢?后来终于想到了。同一时间计时,for循环了5次,setTimeout执行了5次,开了5个定时器,这5个定时器的执行时间分别是1s,2s,3s,4s,5s。却是for循环执行时间太短,瞬间执行完,就约等于同时开了这5个定时器。于是乎,就出现了1s钟出现一次的共出现了5次的 5。

    话说,坑好深啊,一不小心掉进去呀掉进去。。

  • 相关阅读:
    Java.io.outputstream.PrintStream:打印流
    Codeforces 732F. Tourist Reform (Tarjan缩点)
    退役了
    POJ 3281 Dining (最大流)
    Light oj 1233
    Light oj 1125
    HDU 5521 Meeting (最短路)
    Light oj 1095
    Light oj 1044
    HDU 3549 Flow Problem (dinic模版 && isap模版)
  • 原文地址:https://www.cnblogs.com/caicaidandan/p/6692845.html
Copyright © 2011-2022 走看看