网站建设圣诞素材,vue.js做个人网站,广州安全教育平台登录入口账号,医院建设网站要求分析 amp定时器#xff1a;setTimeout()setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式提示#xff1a; 1000 毫秒 1 秒。 提示#xff1a; 如果你只想重复执行可以使用 setInterval() 方法。 提示#xff1a; 使用 clearTimeout() 方法来阻止函数的执行。语法#x…定时器setTimeout()setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式提示 1000 毫秒 1 秒。 提示 如果你只想重复执行可以使用 setInterval() 方法。 提示 使用 clearTimeout() 方法来阻止函数的执行。语法setTimeoutxyzx 函数functiony 时间timez 参数会自动传入第一个参数也就是函数的参数中) 可省略setTimeout(function(){alert(Hello);
}, 3000);因为setTimeout含义是定时器需要通过设置触发时间来调用代码假使设置的时间为3000则在3000毫秒数弹出对话框“Hello” 假使设置的触发时间为“0”时含义则为尽快调用 打个比喻老板让你清点运来的箱子当数到第50个老板和你说把结果写到纸上交给我。当下肯定不能进行记录因为箱子还未清点完成只有最后数完箱子后才能在写到纸上交给老板先把主代码执行完之后才尽快执行setTimeout中的代码JS执行(调用)时机面试题6个6思考以下代码会打印出什么let i0
for(i0;i6;i){setTimeout((){console.log(i)},1000)
}运行上面代码看看会打印出什么结果let i0
for(i0;i6;i){setTimeout((){console.log(i)},1000)
}JS函数的调用时机不同得到的结果不同。setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式其意思就是尽快而不是马上。解释因为setTimeout是一个异步任务执行到这里的操作会被浏览器丢到另一个任务队列里去 浏览器这时候会继续执行for循环。每一次for循环的时候setTimeout都执行一次但是里面的函数没有被执行而是被放到了任务队列里面等待执行for循环了6次就放了6次当主线程执行完成后才进入任务队列里面执行。这时候因为for循环i6了所以输出的全部都是6。如何理解异步呢异步代码不等待结果直接进行下面的代码所以定时器只是开启了而没有立即执行里面的代码等到当前运行坏境的代码执行完之后再回来执行定时器里面的代码。总结异步就是不等待结果的代码。解释二如案例中所示setTimeout的调用时间为“0”尽快调用只有当主代码执行完一遍后才会执行setTimeout定时器但这时i已经为6所以打印出数值6.又因为条件i6共执行了6次当i等于6时跳出循环所有结果为一共打印出6次6。思考那么怎么正确显示如何打印出0、1、2、3、4、5方法一let关键字原理每次进入进入循环时JS会把当前的复制一份路i在循环空间里i0,i1... 不会跟随新的i跟变化JS变态之处把let声明写入for循环中则会正常打印出 0、1、2、3、4、5 服了JS迎合新人for(let i 0; i6; i){setTimeout((){console.log(i)},0)
}解释因为let变量的作用域只能在当前函数中所以每次for循环生成的都是一个新的i,setTimeout里输出的i就是这个新的i这个i是不会变化的所以输出的就是正常的。迦南var、let、consts在JavaScript变量/常量的定义zhuanlan.zhihu.com除了使用 for let 配合还有什么其他方法可以打印出 0、1、2、3、4、5方法二for(i0;i6;i){let j isetTimeout((){console.log(j)},1000)
}方法三闭包for(var i0;i6;i){!function(i){ //这是里面的i //在匿名函数前加上运算符‘ ’不生成新的全局变量防止污染全局setTimeout((){console.log(i)},1000) //这是里面的i}(i) //这是外面的i //在匿名函数后加个立即执行并把i当作参数value传入匿名函数循环执行参数i和匿名函数组成了闭包
}原理声明匿名函数 function(value){} 包裹 setTimeout然后再匿名函数前加上运算符‘ ’防止生成新的全局变量避免污染全局在匿名函数后加个立即调用并把 i 当作参数 value 传入匿名函数进行调用注意参数i和匿名函数会组成了闭包通过闭包将i的变量驻留在内存中当输出j时引用的是外部函数A的变量值ii的值是根据循环来的执行setTimeout时已经确定了里面的的输出了。方法四利用 setTimeout 的第三个参数,将i传进去let i
for(i 0; i6; i){setTimeout((value){console.log(value)},0,i) //setTimeout 第三个参数声明后这个参数可以将自身传给第一个参数 functionvalue
}原理使用setTimeout 的第三个参数--这个参数可以将自身传给第一个参数 也就是匿名函数functionvalue中作为所需要的参数valuevalue可默认不写而 i 共传入6次012345通过匿名函数即可打印出通常不写第三个三处如果默认不写第三个参数则不会传入函数由于每次传入的参数是从for循环里面取到的值所以会依次输出0~5简单一句换setTimeout的第三个参数作用它就是当作setTimeout第一个函数的参数方法五const关键字let i
for(i 0; i6; i){const x isetTimeout((){console.log(x)})
}拓展例1function sum(x,y,z){console.log(xyz);
}
setTimeout(sum,1000,1,2,3);拓展例2var i0;
setTimeout(function(){console.log(第二次i)
},3000,setTimeout(function(){console.log(第一次i);i;
},1000));最后依次输出为 第一次0 第二次1可以看到第三个参数还可以是先执行然后再执行函数不过还要注意一点就是这种传参方式在IE9及更低的版本下是不起作用的setTimeout的意思setTimeout(fn(),1000)
f2()1000ms后尽快执行fn()不代表马上执行如f2()中写了10000行代码需要花10秒执行完那么fn()会在10秒之后执行。