ES6学习笔记一:let、const、块级作用域
一、ES6新增了let命令
let 和 var 一样都是用来声明标量,但let所声明的变量只在【声明的代码块内】及【声明之后】有效
{console.log(a); // undefinedconsole.log(b); // Uncaught ReferenceError: b is not defined(…)var a = 5;let b = 10;
}
console.log(a); // 5
console.log(b); // Uncaught ReferenceError: b is not defined(…)
let命令适合在for循环中使用
// i在for循环内有效
for(let i = 0;i < 5;i++){console.log(i); // 0 1 2 3 4
}
console.log(i); // Uncaught ReferenceError: i is not defined(…)//i在全局内有效
for(var i = 0;i < 5;i++){console.log(i); // 0 1 2 3 4
}
console.log(i); // 5
let 命令暂时性死区
// 大括号中的a使用了let声明,所以 a在大括号中暂时只能在声明之后有效
var a = 5;
{console.log(a); // Uncaught ReferenceError: a is not defined(…)typeof a; // Uncaught ReferenceError: a is not defined(…)let a =10; console.log(a); // 10
}
console.log(a); // 5
let不允许在同一作用域内重复声明变量,因此不能在函数内重新声明变量
{let a = 10;var a = 15; //Uncaught SyntaxError: Identifier 'a' has already been declared
}{var a = 10;var a = 15; // 不会报错console.log(a); // 15
}show(10);
function show(arg){let arg = 5; //Uncaught SyntaxError: Identifier 'arg' has already been declared(…)console.log(arg);
}hide(10);
function hide(arg){{let arg = 5;console.log(arg); // 5}console.log(arg); // 10
}
二、ES6新增了块级作用域
ES5只有全局作用域和函数作用域,会出现以下的问题
//1、内层变量覆盖了外层变量
var number = 5;
show();
function show(){console.log(number); // undefinedvar number = 10 ;
}//2、i泄露成全局变量
var string = 'hello';
for(var i = 0 ;i<string.length ;i++){console.log(string[i]); // h e l l o
}
console.log(i); // 5
ES6块级作用域写法(块级作用域可以无限嵌套,可以代替ES5的匿名函数IIFE)
{let number = 5;console.log(number); // 5{let number = "hello";console.log(number); // hello}
}
ES5严格模式下,函数不能在块级中声明,ES6明确规定可以在块级作用域中声明函数,但声明的函数有点类似let,在块级作用域之外不可引用,由于浏览器可以忽略以上规则,所以尽量避免在块级作用域中声明函数。
//ES5非严格模式
if(true){function show(){ //不报错};
}
//ES5严格模式
'use strict';
if(true){function show(){ //直接报错};
}//ES6严格模式
'use strict';
if(true){function show(){ //不报错};
}
三、ES6新增了const命令
const 声明的是一个只读的变量,一旦声明,不可更改,这就意味着一旦声明就必须初始化,不然会报错,const作用域和let作用域一样.
const PI; //Uncaught SyntaxError: Missing initializer in const declaration
const PI = 3.1415926;
console.log(PI); // 3.1415926;
PI = 4 ; // Uncaught TypeError: Assignment to constant variable.//const声明的变量也和let一样,不能重复声明
var a = 1;
let b = 2;
const a = 5; //Uncaught SyntaxError: Identifier 'a' has already been declared
const b = 6 ; //Uncaught SyntaxError: Identifier 'b' has already been declared//对于复合对象,变量名指向的是数据的地址,const声明的指向的是数据的地址不变,但数据可以变;若要冻结数据,可以使用freeze.
const A = {};
A.props = 123;
console.log(A.props); // 123
A = {}; // Uncaught TypeError: Assignment to constant variable.const B = Object.freeze({});
B.props = 456; // 常规模式,该行代码无效,严格模式下会报错
console.log(B.props); // undefined
全局变量的属性
window.a = 1;
var a = 2 ;
console.log(a); // 2
console.log(window.a); // 2window.b = 1;
let b = 2 ;
console.log(b); // 2
console.log(window.b); // 1
总结:
ES5 有两种声明变量的方法:var 和 function命令
ES6 有六种声明变量的方法:var 、 function 、let 、const 、import、class命令。
ES6学习笔记一:let、const、块级作用域相关推荐
- ES6学习笔记--let和const
今天开始读阮一峰的<ECMAScript 6 入门>,在这里记录下阅读过程中的要点,以便随时查阅. let和const 顶层对象的属性与全局变量挂钩,被认为是js最大的败笔之一,ES6开始 ...
- ES6基础2(块级作用域、数组对象解构)-学习笔记
文章目录 ES6基础2(块级作用域.数组对象解构)-学习笔记 块级作用域 数组解构 对象解构 字符串解构 函数的参数解构 ES6基础2(块级作用域.数组对象解构)-学习笔记 块级作用域 //let c ...
- ES6学习笔记二arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- let、const和var的区别(涉及块级作用域)
let .const和var的区别 let.const.var在js中都是用于声明变量的,在没有进行ES6的学习前,我基本只会使用到var关键字进行变量的声明,但在了解了ES6之后就涉及到了块级作用域 ...
- 详解var、let、const关键词声明变量的区别,以及变量提升、块级作用域的认识等。
首先回顾一下JavaScript中var声明变量的基础知识: • 在使用var关键词声明变量时,变量在函数外则是全局变量,有全局作用域,全局变量在页面关闭后销毁:变量在函数内则是局部变量,作用局部作用 ...
- ES6规范前后块级作用域与函数声明的缠缠绵绵
今天我们就以上面的这个例子来说一下,块级作用域与函数声明在ES6前后的纠葛,当然在ES6之前是没有块级作用域的,但为了与ES6统一,使文章更简明,所以把这对'{}'统一称为块级作用域. 开正题之前,还 ...
- ES6学习笔记02:let 与 const
ES6学习笔记02:let 与 const 用var声明的变量会造成全局污染,于是就产生了新的声明方式. 1.let 用let声明变量,必须先声明后使用. 在for循环头里用let定义循环变量i,那么 ...
- ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区
一.字面量的增强 ES6中对 对象字面量 进行了增强,称之为 Enhanced object literals(增强对象字面量). 字面量的增强主要包括下面几部分: 属性的简写:Property Sh ...
- 搭建Babel运行环境,Traceur ES6模板,块级作用域,let和const命令
搭建Babel运行环境 Babel(http://babeljs.io/)可用于将使用ES6语法的脚本转化为ES5语法的脚本,基本功能的安装步骤如下: 1.安装node解释器和npm包管理工具 2.安 ...
- ES6 学习笔记(一)let,const和解构赋值
let和const let和const是es6新增的两个变量声明关键字,与var的不同点在于: (1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效.va ...
最新文章
- mysql - AB复制
- 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用
- MySQL主键学习总结
- 【django】配置redis数据库【4】
- C#之switch多分支语句
- 数据库存带微信表情的昵称
- Angular 依赖注入里factory函数的调用时机
- 针对12306.cn网站应用架够的一些看法
- 回文字符串(51Nod-1092)
- 基于STM32构建EtherCAT主站(SOEM方案)5
- 不择手段背单词、新东方词根词缀词典、超级新华字典、英语词根词缀记忆大全词典
- 区块链开发入门学习线路图
- C语言递归函数 计算学生年龄
- 计算机鼠标能用键盘不能用,电脑键盘鼠标都不能用了,怎么回事?
- 病毒RNA分离:病毒RNA提取试剂盒方案
- Spring 事件发布机制@EventListener源码深度解析
- 1697_python编程_assertions and exceptions
- 【读书笔记】Linux内核完全注释第二章:微型计算机组成结构
- 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
- php跨平台审计工具,php源码审计工具–PHP Source Auditor 4 released
热门文章
- 在Linux(Ubuntu)下编写编译C语言
- ENVI入门系列教程---一、数据预处理---4.1 遥感图像正射校正
- linux boot 空间不足,解决Ubuntu 提示boot分区空间不足办法
- 狂神说Reids完结篇
- 一个程序员的爱情和他的小棉袄
- 小米手环6NFc支持Android,小米手环6普通版和NFC版有什么区别-哪个好-哪款更值得入手...
- 收藏+下载!Flink 社区最全学习渠道汇总
- Demo 示例:如何原生的在 K8s 上运行 Flink?
- iperf3 网络探测详解(android、iOS、windows)
- mui ajax的值php怎样获取,MUI.ajax是怎么获取数据的