美文网首页前端成长路
Javascrip—取出循环中特定的值

Javascrip—取出循环中特定的值

作者: ninja梅梅 | 来源:发表于2017-03-14 16:57 被阅读7次

一、ES5
在循环过程中,如下代码段不能按照编写的本意输出结果(本意是想输出6)。

var arr = [];
for(var i=0; i<10; i++){
     arr[i] = function(){
           console.log(i);
      }
}
arr[6]();  //10    

由于作用域链的配置机制,导致它们arr[i]引用的都是同一变量i。当循环结束后它们都指向循环最后的结果(i=10),所以arr中每一个的值都是10.
为了能让程序输出想要的值,可以通过创建一个匿名函数强制让闭包的行为符合预期

var arr = [];
for(var i=0; i<10; i++){
     arr[i] = function(num){
           console.log(num)
      }(i);
}
//0
//1
...
//9

上面的代码会依次打印出0~9;由此我们编写如下代码:

var arr = [];
for(var i=0; i<10; i++){
   arr[i] = function(num){
         return function(){
               console.log(num);
        }
    }(i);
}
arr[6](); //6

在上面的程序中,没有直接将闭包赋值给arr[i],而是定义了一个匿名函数,并将立即执行该匿名函数的结果赋值给数组;此时再调用arr[6]();就能得到想要的结果了。
接下来看看在ES6中会有写什么样的惊喜。

二、ES6
ES6中新增了let命令,用于声明变量。所声明的变量只在let命令所在的代码块内有效。所以如要在循环中取特定的值可以用以下代码轻松解决。

var arr = [];
for(let i=0; i<10; i++){
    arr[i] = function(){
        console.log(i);
   }
}
arr[6]();  //6

这段代码和最上面第一段只有一个地方不同,就是在for循环里用let声明的变量而不是var。奇迹就这样产生了。由于变量ilet声明的,所以当前的i只在本轮循环中有效。所以每一次循环i都是一个新的变量,于是最后调用arr[6]()输出的是6.

相关文章

  • Javascrip—取出循环中特定的值

    一、ES5在循环过程中,如下代码段不能按照编写的本意输出结果(本意是想输出6)。 由于作用域链的配置机制,导致它们...

  • javascript高级程序设计读书笔记(二)

    NO.1 变量 JavaScript变量松散,本质上它只是特定时间用于保存特定值的一个名字而已 JavaScrip...

  • vue 取出v-for循环中的index值

    一开始接触到vue的for循环就觉得贼好用,重复性的东西再也不用ctrl C+ctrl V了好吗。不仅代码可复用了...

  • JS的一些非常基础的基础知识

    1. js的数据类型 JavaScript 中的值都具有特定的类型。例如,字符串或数字。在 JavaScrip...

  • 第二章⑥跳转语句

    break 使用在switch中或者循环中使用在循环中,表示:结束当前循环(默认最近) continue 使用在循...

  • javascript数组去重算法

    思路: 构建一个新的数组res存放结果; for循环中每次从原数组中取出一个元素,判断这个元素在res中的索引值是...

  • IDEA使用(12)_断点高级使用

    一、条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。鼠标右键红点

  • IntelliJ IDEA 调试技巧

    一、条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。 参考上图,在断点...

  • IDEA的这几个调试的骚操作!

    一、条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。 参考上图,在断点...

  • 这 5 条 IntelliJ IDEA 调试技巧太强了!

    一、条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。 参考上图,在断点...

网友评论

    本文标题:Javascrip—取出循环中特定的值

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