ES6的变量
来源:互联网 发布:淘宝大件物流怎么设置 编辑:程序博客网 时间:2024/06/09 14:37
ES6学习笔记
变量let和常量const
在此首先感谢石川老师,本笔记内容均是基于老师的视频教程,如果有照搬老师原话的,请恕本人水平不够。
var的问题们
在之前的版本中我们怎么来定义一个变量呢?
作为一个弱类型的语言,没有什么是一个var
解决不了的,于是问题来了。我们先看几个之前ES5版本会有的几个问题:
- 可以重复声明
在一个项目中,如果在版本迭代中或者多人协作中,使用了相同的变量名,就可能造成错误。
//可以重复声明var a = 12;var a = 100;console.log(a); //控制台打印100
- 无法限制修改
// 有很多约定俗成的量是不可变的var PI = 3.1415926;PI = 4;// 这是不合理的
- 没有块级作用域
在C++。Java这些严谨的语言中,块级作用域是很重要的,但是js在这方面并不明显
if(true){ var a = 13;}//在if外面也可以访问console.log(a);
let和const
- let和const不能重复声明
let a = 10;let a = 100;
下面是报错信息
Uncaught SyntaxError: Identifier ‘a’ has already been declared
const b = 10;const b = 100;
下面是报错信息
Uncaught SyntaxError: Identifier ‘b’ has already been declared
- let可以修改,const不可修改
let a= 10;a = 100;console.log(a);const b = 10;b = 100;console.log(b);
下面是错误信息
Uncaught TypeError: Assignment to constant variable.
- 块级作用域问题
{ let a = 13; } //在if外面不可以访问 console.log(a);
错误信息
Uncaught ReferenceError: a is not defined
块级作用域的一个重要作用
这个是我没有想到的点,石川老师讲了这个例子
“就这一个例子过来,保准你服服帖帖的,一辈子都喜欢块级作用域。”
先看看旧版本的问题
<input type="button" value="Btn1"><input type="button" value="Btn2"><input type="button" value="Btn3"><script type = "text/javascript">window.onload = function(){ var btns = document.getElementsByTagName("input"); console.log(btns); for(var i = 0;i < btns.length;i++){ btns[i].addEventListener("click",function(){ alert(i); }); }}</script>
经过尝试之后,我们发现,不会像预想的一样分别alert出0,1,2,而都是alert出了3.
我们往往要用匿名函数来解决问题
<script type = "text/javascript">window.onload = function(){ var btns = document.getElementsByTagName("input"); console.log(btns); for(var i = 0;i < btns.length;i++){ (function(i){ btns[i].addEventListener("click",function(){ alert(i); }); })(i); }}</script>
这样很繁琐,而且有其他语言使用习惯的,往往不习惯使用函数作用域。
只要把for循环中的var
改为let
就可以完美的解决这个问题,不妨试试下面的代码:
window.onload = function(){ var btns = document.getElementsByTagName("input"); console.log(btns); for(let i = 0;i < btns.length;i++){ btns[i].addEventListener("click",function(){ alert(i); }); }}
本文完
阅读全文
0 0
- ES6的变量声明
- ES6的变量声明
- ES6的声明变量
- ES6的变量
- 【ES6】变量的解构赋值
- ES6变量的结构赋值
- ES6 变量的解构赋值
- es6 变量的解构赋值
- 01、ES6 变量的扩展
- ES6:变量的解构赋值
- ES6 变量的数组解构
- ES6 的变量对象解构
- ES6变量的解构赋值
- es6 变量的解构赋值
- ES6变量的解构赋值
- ES6--变量的解构赋值
- ES6--变量的解构赋值
- ES6变量的解构赋值--读书笔记
- Python3怎样生成Html测试报告
- codeforces Round #446 (Div. 2) D
- 正则表达式的应用
- dumpsys meminfo执行流程(一)
- java连接不上sq server 2012 express的解决方法
- ES6的变量
- Kivy显示中文
- 欧几里得+扩展欧几里得(理解)
- Android MVP 架构及布局业务逻辑复用
- PAT (Basic Level) Practise (中文)1075. 链表元素分类(25)
- 自定义的动态链接库使用
- C++ 未知数量参数/list的未知数量的初始化
- 计算机中的颜色表示法——RGB
- 2017 北京区域赛 J题