JS 函数的执行时机

简介: 通过一道面试题来分析一下JS 函数的执行时机~

这篇文章主要讲解JS函数执行的时机,在笔试中我们经常会遇到使用 for 循环延时输出 i 的值这类面试题,下面就用这道题来对JS函数执行的时机进行说明

1. let i = 0 放在 for 循环外面

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

例如上面这段代码,输出的结果不是 0,1,2,3,4,5而是 6,6,6,6,6,6

这是因为循环会先被执行,当循环执行结束后 i 的值为 6,之后再执行六次 console.log(i) 操作

setTimeout 函数是让语句尽快执行,但不是现在,会有一定的延迟,在延迟的这段时间中函数完成了 for 循环,所以六次打印操作会在循环结束后一起执行,此时 i 的值为 6 ,所以打印的结果为 6 个 6

2. let i = 0 放在 for 循环里面

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

如果我们将 let i=0 放入 for 循环中,我们就会发现打印出来的是 0,1,2,3,4,5

这是因为 JS 在 for 和 let 一起使用时会在每一次循环多创建一个 i ,所以我们延时打印出来的 i 实际上是 6 个不同的 i ,此时 setTimeout 函数就失去了作用

3. 使用 var i = 0

无论是在 for 循环里面还是外面使用 var i = 0 ,都会定义一个全局变量 i ,所以 var i = 0 放在 for 循环里面或者外面结果都一样,都是 6 个 6 ,与 let i = 0 放在 for 循环外面的结果一样

for(var i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
目录
相关文章
|
2天前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
10天前
|
JavaScript 前端开发
js教程——函数
js教程——函数
18 4
|
10天前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
11 2
|
12天前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
20 5
|
12天前
|
JavaScript 前端开发
Node.js 函数
10月更文挑战第5天
17 3
|
1天前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是由关键词 `function` 开头的代码块,用于执行特定任务。函数可以无参数或带多个参数,参数以逗号分隔。调用函数时,传入的参数值会被函数内部使用。JavaScript 对大小写敏感,函数名和调用时必须保持一致。示例展示了如何通过按钮点击调用带参数的函数,根据不同的参数显示不同的欢迎信息。
|
5天前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
9 0
|
JavaScript 前端开发 C++
javascript中的执行环境和作用域详解
首先,我们要知道执行环境和作用域是两个完全不同的概念 函数的每次调用都有与之紧密相关的作用域和执行环境;从根本上来说,作用域是基于函数的,而执行环境是基于对象的(例如:全局执行环境即window对象);换句话说,作用域涉及到被调用函数中的变量访问,且不同的调用场景是不一样的;执行环境始终是this.
4445 0