搜索

首页  >  问答  >  正文

javascript - 关于i值为什么等于5的问题

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

第一个问题:请问这属于js的哪一部分知识内容?
第二个问题:通俗地解释下为什么i会等于5?
0o0

欧阳克欧阳克2727 天前918

全部回复(8)我来回复

  • PHP中文网

    PHP中文网2017-06-12 09:31:37

    这个问题是闭包吗? 我觉得并不是闭包,并没有函数的嵌套. 它就是一个 函数本地变量匿名函数 的问题.

    创建一个匿名函数并立即执行并没有涉及闭包吧. 只是循环结束, i 的值变成 5 退出循环, console.log(i)打印当前的 i, 即 5.

    这与以下是等同的:

    var test = function() {
        for(var i = 0; i < 5; i++) {}
        console.log(i) // i = 5
    }
    test();

    回复
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:31:37

    这不属于闭包,只是for的循环速度后打印了一下值而已

    回复
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    这就是个 js 没有块级作用域的问题,只有函数作用域导致的问题。。。居能直接扯上闭包。。。我服。。。

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:31:37

    在JavaScript中是没有块级作用域这么一说的,所以for循环{}以及if语句{}内部的变量,在外部是可以访问的。

    作用域分为全局作用域和局部作用域

    全局作用域是当你创建一个文档的时候,系统为你内置的。
    局部作用域是通过创建一个函数来实现的。

    回复
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    • 这个一般都出现在考察闭包的问题中

    • i + 1 循环了5次,所以 i 是 5

    回复
    0
  • ringa_lee

    ringa_lee2017-06-12 09:31:37

    1. 你应该想了解js中的闭包部分问题

    2. 因为执行console.log时for循环执行完成了 i自然等于5

    回复
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    去看看闭包结合定时器吧,或者事件绑定

    回复
    0
  • ringa_lee

    ringa_lee2017-06-12 09:31:37

    js中的闭包,

    回复
    0
  • 取消回复