美文网首页
js里for循环的变量提升和变量作用域

js里for循环的变量提升和变量作用域

作者: A_si | 来源:发表于2019-05-17 19:33 被阅读0次

for 循环不是函数,是js的基本流程控制语句块,所以for循环声明的i可以循环外被引用。当for循环定义在函数里面时,作用域时函数内的局部作用域:

  function foo() {
        for (var i = 0; i < 3; i++) {
          //
          console.log(i);
        }
        i += 100; // for循环外仍然可以引用变量i
        console.log(i);
      }
      foo();
      console.log(i);// 函数外引用i, 报错,未定义

for 循环声明在 <script>标签里时,作用域是全局作用域:

    <script>
      for (var i = 0; i < 3; i++) {
        console.log(i);
      }
      i += 100; // for循环外仍然可以引用变量i
      console.log(i); // for循环外仍然可以引用变量i
    </script>

for 循环的声明的i也会被提升,同样不赋值:

 console.log(i);  // undefined
      for (var i = 0; i < 3; i++) {
        console.log(i);
      }
      i += 100; 
      console.log(i);

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的,为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:

     function foo() {
        var sum = 0;
        for (let i = 0; i < 100; i++) {
          sum += i;
          console.log(i);
          
        }
        // i is not defined:
        i += 1;
      }
     foo();

相关文章

  • js里for循环的变量提升和变量作用域

    for 循环不是函数,是js的基本流程控制语句块,所以for循环声明的i可以循环外被引用。当for循环定义在函数里...

  • 作用域与变量提升

    作用域与变量提升 作用域 JS中变量的作用域有全局作用域和局部作用域两种,作用域简单来讲就是变量与函数的可访问范围...

  • JS 提升

    变量提升即将变量声明提升到它所在作用域的最开始的部分 在 js 中只有两种作用域,全局作用域和函数作用域,在ES6...

  • js 的变量提升和函数提升

    1. 深入理解 js 的变量提升和函数提升 先了解:js没有块级作用域,只有全局作用域,和函数作用域 相同的函数名...

  • ECMAScript6 新增语法

    let 作用域在代码块 用在for循环里面 在作用域内变量重名报错 没有变量提升 死区 函数

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • var let const之间的区别?

    1.var ①var声明的变量没有块级作用域,只有函数作用域和全局作用域 ②var声明的变量有变量提升 ③变量可以...

  • js 变量的作用域和变量提升

    变量的作用域 变量分为两类:全局(global)的和局部的,全局变量的作用域是全局性的,局部变量写在函数体内,变量...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • 2018-08-03

    js作用域和作用域链 什么是作用域 ⼀个变量的作⽤域是程序源代码中定义这个变量的区域。对象, 函数也是变量。作...

网友评论

      本文标题:js里for循环的变量提升和变量作用域

      本文链接:https://www.haomeiwen.com/subject/lncaaqtx.html