ES6 let const 声明变量 块级作用域
ES6 中除了使用 var 定义变量,还有let、const,定义变量。
function getValue(condition){
console.log(typeof value2); // undefined,与 if 语句中的 value2 不在同一个作用域中
//console.log(typeof v); //临时死区,需要先定义后使用,ReferenceError: v is not defined
let v = "e";
let value1;
// let value1; // 不能重复声明 SyntaxError: Identifier 'value1' has already been declared
if(condition){
var value = "blue"; // var 声明的变量,会提升为当前作用域的顶部声明的变量
let value2 = "green"; // let 声明的变量,具有块级作用域
value1 = value;
}else{
console.log(value);
value1 = "";
}
console.log(value); // 可以访问value
console.log(value2); // 不可以访问value2,ReferenceError: value2 is not defined
}
getValue(1);
const 声明和 let 声明的 变量都具有块级作用域,并且不能重复声明,声明的变量不会提升至当前作用域顶端。如果在声明之前访问使用const、let声明的变量。
Javascript引擎在扫描代码发现变量声明时,要么将它提升至当前作用域顶部(遇到var 声明),要么将声明放到临时死区(TDZ)中(遇到let 和 const声明)。访问TDZ中的变量会触发运行时错误。只有执行过变量声明语句后,变量才会从TDZ重移除,然后才能访问。
const声明的是常量,不可再修改,但用 const 声明对象时,可以修改其属性。
const person = {
name : "tom"
}
person.name = "Greg";
person = null; //TypeError: Assignment to constant variable.
person = {name: "Greg"}; //TypeError: Assignment to constant variable.
循环中的 let 声明,每次迭代循环都会创建一个新变量,并以之前迭代中同名变量的值将其初始化。for循环和for-in循环中行为一致。
var funcs = [];
for(let i=0; i<10;i++){
funcs.push(function(){
console.log(i);
});
} funcs.forEach(function(func){
func(); // 输出 0、1、....、9
});
const和let 在全局作用域中,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性,不会覆盖全局变量,而只能遮蔽它。
var Array = "hello";
console.log(window.Array); // "hello" var ncz = "Hi!";
console.log(window.ncz); // "Hi!" let RegExp = "Hello!";
console.log(RegExp); // "Hello!"
console.log(window.RegExp === RegExp); // false const ncz1 = "hi";
console.log(ncz1); // "hi"
console.log("ncz1" in window); //false
ES6 let const 声明变量 块级作用域的更多相关文章
- ECMAScript概述及浅谈const,let与块级作用域
ECMAScript可以看作javascript的标准规范,实际上javascript是ECMAScript的一门脚本语言,ECMAScript只提供了最基本的语言JavaScript对ECMAScr ...
- ES6入门一:块级作用域(let&const)、spread展开、rest收集
let声明 const声明 块级作用域 spread/rest 一.let声明与块作用域 在ES6之前,JavaScript中的作用域基本单元就是function.现在有了let就可以创建任意块的声明 ...
- 《浏览器工作原理与实践》<09>块级作用域:var缺陷以及为什么要引入let和const?
在前面我们已经讲解了 JavaScript 中变量提升的相关内容,正是由于 JavaScript 存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是 JavaScript 的一个重要设计缺陷 ...
- 12.24 ES6浅谈--块级作用域,let
第一部分:ES6新增了块级作用域,let关键字用于声明变量,相较于var而言,let关键字不存在声明提前. 1.ES6真正的出现了块级作用域,使用双花括号括住并在其中用let声明变量,会存在暂时性死区 ...
- Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...
- 从函数作用域和块级作用域看javascript的作用域链
在ES6之前,javascript只有全局作用域和函数作用域.所谓作用域就是一个变量定义并能够被访问到的范围.也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这 ...
- 01.JS块级作用域与let
1.块级作用域 什么是: 在一个代码块(括在一对花括号中的一组语句)中定义的所需变量(与let配合使用)并在代码块的外部是不可见的. 为什么: 在ES6之前,函 ...
- 混合开发的大趋势之 一个Android程序员眼中的 React.js 块级作用域 和 let
转载请注明出处:王亟亟的大牛之路 最近都有事干然后,快到月底了这个月给CSDN的博文也就两篇,想想也蛮多天没更了,那就来一篇. 老规矩,先安利:https://github.com/ddwhan012 ...
- ES6块级作用域及新变量声明(let)
很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域.用var声明的变量具有变量提升(declaration hoist ...
随机推荐
- 常见模块(二) logging模块
logging模块是专门做日志系统的.分为函数版和自定义函数. (一)logging模块初级版 缺点,不能指定字符集,不能把屏幕输出和文件日志同时记录.只能选择其一. 文件记录日志 import lo ...
- 关于java类加载的那些事
首先,类加载的定义: 类加载(Class Loading)是一种机制,他描述的是将字节码以文件形式加载到内存再经过连接.初始化后,最终形成可以被虚拟机直接使用的Java类型地过程. 其次,类加载器的分 ...
- exactly-once和kafka
Exactly-Once的概念是指"恰好一次",简单讲就是同一个数据只会被处理一次,应用有机质保证不会重复处理同一条数据(如果数据因为因为网络业务异常被发送多次):Exactly- ...
- Nginx反向代理tomcat返回400 bad request
Nginx反向代理tomcat返回400 bad request nginx 版本1.12, tomcat版本 9.06 最近用Nginx做反向代理tomcat,实现前后端分离,nginx 将请求代理 ...
- Linux之目录结构配置
因为 Linux 的开发者实在太多了,如果每个人都发展出属于自己的目录配置方法, 那么将可能会造成很多管理上的困扰.所以,就有一个叫做Filesystem Hierarchy Standard (FH ...
- c++11 tuple实现
实现一个简易版的c++11 tuple. 我使用的编译器是gcc,codeblocks13.12自带的,哪个版本我不熟gcc也没去查. 大致看了下他家的tuple实现,多继承,tuple之上还有2个辅 ...
- Spring Boot-基础教程
一.关于RESTfull API风格 import java.util.Date; /** * 实体类 */public class User { private int id; private St ...
- 纯CSS制作图形效果
下面所有的例子都是在demo.html的基础上添加相关样式实现的. <!DOCTYPE html> <html> <head> <meta charset=& ...
- activity--生命周期总结
22.Android禁止屏幕旋转 & 旋转屏幕时保持Act内容? 21.旋转屏幕Act执行的生命周期方法? 12.ActA与 ActB互相跳转生命周期情况? 11.Act的生命周期? ==== ...
- MyEclipse 10 + OsChina GIt项目托管
环境:Egit+MyEclipse 10,此教程默认MyEclipse 10和Egit都已经配置好. 1.注册OsChina Git账号,网址:http://git.oschina.net/,具体注册 ...