let 和const
let 命令
es6新增了let命令,用于声明变量,与var用法类似,但是使用let声明变量只在它所在的块内有效,而var则是定义的全局变量
{let a=10;var b=1;
}
a //a is not defined,外部的a不能访问到上面块中定义的a变量
b //1
let不存在变量提升提升
//使用var会发生变量提升,当脚本开始运行使用var命令声明的变量已经存在 console.log(foo); //undefined var foo=2;console.log(foo); //报错ReferenceError let foo=2; //使用let声明,声明的变量一定要在声明之后使用,否则会报错
let不允许重复声明
let不允许在相同作用域内重复声明同一个变量
//报错 function(){let a=10;var a=1;//let a=3; }
const命令
const用于声明常量,并且该常量那个是只读常量,一旦声明该常量就不能被更改
const a=1; a //1 a=2; //报错
并且const只声明,不赋值也会报错。
const a; //报错
const变量和let一样只能在声明之后使用,并且命令生命的变量也不会提升,同样也不可以重复声明。
const本质
const的常量不能够更改实质上并不是变量的额值不能更改,而是变量指向的内存地址不能变动。
块级作用域
es5只有全局作用域和函数作用域,但是没有块级作用域。
没有块级作用域导致的问题
- 内层变量可能会覆盖外层变量
- 用来计数的循环变量泄露为全局变量
for(var i=0;i<10;i++){console.log(i) } console.log("外部"+i) 初出结果: 1 2 3 4 5 6 7 8 9 外部10
可以看出外部的i会受到循环体中i的影响,如果使用let就会有块级作用域,最后就会显示,外部i不能找到就会报错。
es6的块级作用域
在块级作用域中,外层作用域不能访问内层作用域的变量,,但是内层作用域可以定义外层作用域的同名变量。
function example(){let n=5;if(true){let n=10; //内层作用域可以和外层作用域声明同名变量 }console.log(n); //5,外层作用域不会受到内层作用域的影响 }
块级作用域与函数声明
在es5中规定,函数只能在顶层作用域和函数作用域之中声明,不能再块级作用域中声明。
但是es6有所改变:
- 允许在块级作用域内声明函数
- 函数声明允许类似var,会提升到全局作用域或函数作用头部。
- 函数声明会提升到块级作用域头部
- 但是es6规定,在块级作用域中声明函数类似于let,在块级作用域之外不能引用。
- 但是需要避免在块级作用域中声明函数,一定要使用函数表达式形式写,而不是韩红素声明语句
//函数声明语句 {let a="test"function(){return a;} }//函数表达式 {let a="test";let f=function(){return a;}; } //并且块级作用域一定要有大括号,才能声明函数
转载于:https://www.cnblogs.com/zzzha/p/9435790.html
let 和const相关推荐
- c/c++中的const
关于const能否修改 c语言 #include <stdio.h> int main() {const int i = 10;//const int i; //错误,const变量必须在 ...
- 微信小程序var,let,const的区别
var 用var的方式声明的变量,为全局变量 let 声明块级变量,即局部变量 const 用于声明常量,也具有块级作用域 const PI=3.14;
- js中定义变量之②var let const的区别
var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...
- C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)
引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...
- C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)
在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...
- Const 重载解析
1. Const重载应用场景 首先,对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参.则这个时候无论加不加const对实参不会产生任 ...
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
- C++const关键字作用
修饰普通变量,表示不可修改(在定义的时候必须初始化) #include <iostream> using namespace std; const int a1 = 10; int mai ...
- const与define相比优点_const与#define的区别、优点
const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开. 补充:预处理器根据以#开头的命令,修改原始的程序.比如我们常见的#include 命令告诉处理器读取系统头文件 ...
- inline函数返回值_C++知识补充-指针,const,函数指针,指针数组,运算符重载
嵌入式Linux:C++ 面试准备珍藏版本zhuanlan.zhihu.com 明月照我心:123道c++笔试题汇总(含答案)zhuanlan.zhihu.com 阿贵:常见C++笔试面试题整理 ...
最新文章
- linux命令rname,linux的rename命令
- JavaScript 开发10个实用技巧
- 基于LBS的热点店铺搜索
- 前端中全部盒子靠左对齐_图文详解ul中li内容垂直居中和水平居中的方法
- Django web开发系列(五)模板
- sql 基础--mysql 5
- 季节前面为什么用in_无机涂料为什么可以防霉呢,如何避免梅雨季节前面出现霉菌...
- Coinbase发生一笔7500枚BTC巨额转出交易 转移金额近2.5亿美元
- 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题
- 创建和使用约束Constraint
- linux 命令行下导出查询的数据
- 译: 6. 任务调度(定时执行任务)
- 汇川机器人视觉标定_汇川机器人应用技术课件(1).ppt
- 【业务】JS中的有序Map与无序Object
- rpg制作大师_在线RPG大师班
- 第三章:Servlet基础
- weblogic上服务器上日志查看及ohs服务器重启
- 断点续传(视频进度条拖动以及flv.js需要断点续传)
- 摄像头各参数的意义_手机摄像头的一些主要参数表达了什么意思?
- 解决uni-app uniCloud小程序预览没有数据
热门文章
- 解决html2canvas截取页面部分div黑屏问题
- ES6之Module的语法(2)
- 刷题总结——xor(ssoj)
- 架构重构改善既有代码的设计
- JVM入门到放弃之基本概念
- SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
- Android 底部上拉抽屉view
- 宝塔面板 windows 2012 mysql 允许远程连接
- nuxt route 全局管理 route.beforeEach 替代
- java栈API_Java中的堆栈API——Stack