美文网首页
js var let问题

js var let问题

作者: 叫我魏大川 | 来源:发表于2019-11-07 10:26 被阅读0次

对接腾讯地图时循环添加marker,for循环时遇到了一个诡异的问题,给marker添加点击事件,类似block的调用方式,如果参数用了var,则永远取到的是循环里的最后一个marker。

ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。

”let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。“

举例:

for (var i = 0; i <10; i++) {  
  setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。
    console.log(i);        // 执行此代码时,同步代码for循环已经执行完成
  }, 0);
}
// 输出结果
10   共10个
// 这里面的知识点: JS的事件循环机制,setTimeout的机制等
// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
  }, 0);
}
// 输出结果:
0  1  2  3  4  5  6  7  8 9

相关文章

  • js var let问题

    对接腾讯地图时循环添加marker,for循环时遇到了一个诡异的问题,给marker添加点击事件,类似block的...

  • 【JS】var、let

    var的作用域提升

  • js 2022经典面试题汇总

    1.JS数据类型有哪些 2.var、let、const区别 var存在变量提升,而let、const没有 let、...

  • 前端面试题整理

    针对js的问题 let 和 var的区别是什么var声明的变量都是全局变量,不存在局部变量,有变量提升;let可以...

  • 3小时入门javascript

    JS基本数据类型及变量声明在js中有三种声明变量的方式:var let const,let var const的区...

  • ES6语法

    一、let/var/const let/var:事实上var的设计可以看成JS语言设计上的错误,所以设计者决定修复...

  • javaScript中var于let区别

    ES6引入let关键字,在JS中var 与let都是用来声明变量,var没有块级作用域,let有。let因为有了块...

  • sample

    一、var与let JS中的块级作用域,var、let、const三者的区别 var是函数级作用域,没有块级作用域...

  • TypeScript 学习笔记 之 变量声明

    TS 跟最新的 JS 标准一样支持三种变量声明类型:var,let,const。其中 let 是为了取代 var ...

  • ES6 的部分知识点

    为什么要有 let 以前都是用的 var ,let 出现就是解决 var 带来的问题。 var 的缺点: 重复声明...

网友评论

      本文标题:js var let问题

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