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只有全局作用域和函数作用域,但是没有块级作用域。

没有块级作用域导致的问题

  1. 内层变量可能会覆盖外层变量
  2. 用来计数的循环变量泄露为全局变量
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有所改变:

  1. 允许在块级作用域内声明函数
  2. 函数声明允许类似var,会提升到全局作用域或函数作用头部。
  3. 函数声明会提升到块级作用域头部
  4. 但是es6规定,在块级作用域中声明函数类似于let,在块级作用域之外不能引用。
  5. 但是需要避免在块级作用域中声明函数,一定要使用函数表达式形式写,而不是韩红素声明语句
//函数声明语句
{let a="test"function(){return a;}
}//函数表达式
{let a="test";let f=function(){return a;};
}
//并且块级作用域一定要有大括号,才能声明函数

转载于:https://www.cnblogs.com/zzzha/p/9435790.html

let 和const相关推荐

  1. c/c++中的const

    关于const能否修改 c语言 #include <stdio.h> int main() {const int i = 10;//const int i; //错误,const变量必须在 ...

  2. 微信小程序var,let,const的区别

    var 用var的方式声明的变量,为全局变量 let 声明块级变量,即局部变量 const 用于声明常量,也具有块级作用域 const PI=3.14;

  3. js中定义变量之②var let const的区别

    var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...

  4. C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)

    引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...

  5. C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)

    在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...

  6. Const 重载解析

    1. Const重载应用场景 首先,对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参.则这个时候无论加不加const对实参不会产生任 ...

  7. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  8. C++const关键字作用

    修饰普通变量,表示不可修改(在定义的时候必须初始化) #include <iostream> using namespace std; const int a1 = 10; int mai ...

  9. const与define相比优点_const与#define的区别、优点

    const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开. 补充:预处理器根据以#开头的命令,修改原始的程序.比如我们常见的#include 命令告诉处理器读取系统头文件 ...

  10. inline函数返回值_C++知识补充-指针,const,函数指针,指针数组,运算符重载

    嵌入式Linux:C++ 面试准备珍藏版本​zhuanlan.zhihu.com 明月照我心:123道c++笔试题汇总(含答案)​zhuanlan.zhihu.com 阿贵:常见C++笔试面试题整理​ ...

最新文章

  1. linux命令rname,linux的rename命令
  2. JavaScript 开发10个实用技巧
  3. 基于LBS的热点店铺搜索
  4. 前端中全部盒子靠左对齐_图文详解ul中li内容垂直居中和水平居中的方法
  5. Django web开发系列(五)模板
  6. sql 基础--mysql 5
  7. 季节前面为什么用in_无机涂料为什么可以防霉呢,如何避免梅雨季节前面出现霉菌...
  8. Coinbase发生一笔7500枚BTC巨额转出交易 转移金额近2.5亿美元
  9. 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题
  10. 创建和使用约束Constraint
  11. linux 命令行下导出查询的数据
  12. 译: 6. 任务调度(定时执行任务)
  13. 汇川机器人视觉标定_汇川机器人应用技术课件(1).ppt
  14. 【业务】JS中的有序Map与无序Object
  15. rpg制作大师_在线RPG大师班
  16. 第三章:Servlet基础
  17. weblogic上服务器上日志查看及ohs服务器重启
  18. 断点续传(视频进度条拖动以及flv.js需要断点续传)
  19. 摄像头各参数的意义_手机摄像头的一些主要参数表达了什么意思?
  20. 解决uni-app uniCloud小程序预览没有数据

热门文章

  1. 解决html2canvas截取页面部分div黑屏问题
  2. ES6之Module的语法(2)
  3. 刷题总结——xor(ssoj)
  4. 架构重构改善既有代码的设计
  5. JVM入门到放弃之基本概念
  6. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
  7. Android 底部上拉抽屉view
  8. 宝塔面板 windows 2012 mysql 允许远程连接
  9. nuxt route 全局管理 route.beforeEach 替代
  10. java栈API_Java中的堆栈API——Stack