博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6-01:常量与变量的声明
阅读量:6196 次
发布时间:2019-06-21

本文共 1096 字,大约阅读时间需要 3 分钟。

首先,我们声明一个变量:

//定义一个变量num,并赋值为10;let num = 10;//进行打印console.log(num);

let与var有所不同:

语法特点1:let变量只能在当前代码块使用

(function(){        {            let i = 2;        }        alert(i);    })();

代码块是什么呢?

我们的大括号就属于一个代码块,只要是代码块以内的都可以使用到,如果在外面就获取不到了,此时输出的i是没有值的。

语法特点2:同一代码块不允许出现重名let变量

(function(){        var i = 9;//不允许        let i = 10;//不允许        let i = 11;        console.log(i);    })();

下面来看下一个小测试:

var arr3 = [];    for(var i = 0;i<10;i++){      arr3[i] = function(){          alert(i)      }    }    arr3[3]();

结果会是多少?

变量i是var声明的,在全局内都有效,

所以每次循环,新值都会覆盖旧值,导致最后输出的是最后一轮的i的值。

我们如何解决这种问题呢?

这就要说到闭包了,这里不多说,看下解决方法(如果不了解闭包可以在本博客搜索相关知识)。

以下通过闭包解决

var arr = [];for(var i = 0;i<10;i++){        (function sum(val){            arr[i] = function(){                alert(val);            }        })(i)    }    arr[9]();

当然,这种方法是不是麻烦了点!我们可以通过let定义变量来解决这个问题

以下是let解决

var arr2 = [];    for(let i = 0;i<10;i++){        arr2[i] = function(){            alert(i)        }    }    arr2[3]();
变量i是let声明的,当前的i只在本轮循环有效, 所以每一次循环的i其实都是一个新的变量,所以最后输出的是3. 你学会了吗?有问题欢迎提出来!

转载于:https://www.cnblogs.com/ningmeng666/p/6492270.html

你可能感兴趣的文章
[Angular 2] Handling Click Events with Subjects
查看>>
php在没有登录的情况下自动跳转到登录页
查看>>
Linux启动过程笔记
查看>>
poj 3411 Paid Roads(dfs)
查看>>
SQL Server将数据导出到SQL脚本文件
查看>>
Win10下用Anaconda安装TensorFlow
查看>>
Google Maps Application Developing —— Quick Start
查看>>
PHP生成word的三种方式
查看>>
Iphone连轴画的实现
查看>>
Win7局域网打印机共享设置(详细图文流程)
查看>>
亿能测试资讯_2013-8-11
查看>>
为什么要使用AOP?
查看>>
Perl代码片段-正则表达式测试程序
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
uva-442 Matrix Chain Multiplication
查看>>
(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句...
查看>>
Beauty Contest
查看>>
[ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)
查看>>
黑苹果收集
查看>>
【转】Struts2 和 Spring MVC对比
查看>>