JavaScript 严格模式(use strict)

严格模式下你不能使用未声明的变量。
const c1 = 1;
const c2 = {};
const c3 = [];
不能对c1的值进行再次的赋值;
也不能在对c2,c3进行赋值,但是可以改变c2的内容,因为c2是个对象,看例子
c2.p1 = 1; console.log(c2.p1)打印出来结果为1
同样,也可以往c3中添加元素,因为c3是个数组。
const声明的变量与let声明的变量类似,它们的不同之处在于,const声明的变量只可以在声明时赋值,不可随意修改,否则会导致语法错误
例如 const a=1; a=12; 这样会报错 
同样 const a=0; a++;在use strict下一样会报错
声明不赋值同样报错,const a; 报错
let a=0; a++;可以被执行; let a=0; a=12;可以被执行
let a=0; let a=12; 报错
 有区别于var在于他们存在块级作用于,就是你声明的变量只作用于某个域,比如一个函数,而不是全局,从上面也可以看出let 为变量 const为常量

下面在具体举例说明

1.let声明的变量只在变量声明时所在的代码块内有效 
对比: 

  var url = "www.baidu.com"; 

  alert(url); 
//-------------------------------- 

  let url = "www.baidu.com"; 

  alert(url); 
2.let不允许在同一作用域重复声明变量: 
 let url = "www.baidu.com"; // 第一次

  let url="www.sina.com.cn"; //第二次
   console.log(url);  
} // 第一次正确,第二次放到括号里面错误 
3.let与全局变量的声明 
//错误 
let a=3; 
  { 
    var a=5; 
  } 
    alert(a); 
 
//正确 
var a=3; 

   let a=5; 

  alert(a); 
4.作用到子作用域
let a=3;
{
   a=5;  //子作用域
}
  alert(a); //弹出5

二、const命令 

const命令用来生成一个常量,常量被声明后,值无法改变。其他与let相同。
const一旦定义,无法更改,let定义块级变量,他们都是无法重复声明的,会报错,而var可以覆盖之前的声明

ES6新增const常量、let变量的更多相关文章

  1. #define宏常量和const常量的区别

    C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而 ...

  2. C常量与变量

    /** * C中的常量与变量 * 常量的值在程序中是不可变化的,其在定义时必须给一个初始值 * 常量的定义方式: * 1.#define 定义宏常量 * 2.const 定义const常量 * 对于# ...

  3. ES6 新增声明变量的 var let const 的区别详解

    var 如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域. let 1.let 声明的变量具有块作用域的特征 ...

  4. ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))

    1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...

  5. ES6新增语法(一)——let、const、var的区别

    ES6简介 ES6是ECMAScript 6.0的简称,是javascript语言的下一代标准,已经在2015年6月正式发布上线.目的就是为了统一javascript的语法标准,可以用来开发大型应用程 ...

  6. ES6 let const 声明变量 块级作用域

    ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...

  7. ES6之新增const命令使用方法

    hi,我又回来了,今天学习一下const命令. 声明一个常量 const声明一个只读常量,一旦声明,常量的值便不可改变. 例子如下: const food = 12; food = 23; // Un ...

  8. 【ES6基础】let、const命令和变量的结构赋值

    ES5声明变量(2):var .function ES6声明变量(6):var.function.let.const.import和class 1.let命令和const命令 (1)let和const ...

  9. es6 新增变量声明方式

    let 与 var var var声明的变量拥有全局作用域或者局部作用域 在全局中声明变量即为全局变量 在函数中声明变量即为局部变量 而var在使用过程中也逐渐暴露出许多问题 var的几大问题 变量提 ...

随机推荐

  1. Spark调优

    因为Spark是内存当中的计算框架,集群中的任何资源都会让它处于瓶颈,CPU.内存.网络带宽.通常,内存足够的情况之下,网络带宽是瓶颈,这时我们就需要进行一些调优,比如用一种序列化的方式来存储RDD来 ...

  2. OC中的复合

    #import <Foundation/Foundation.h> #import "Car.h" int main(int argc, const char * ar ...

  3. 使用eclipse遇到问题:the-package-collides-with-a-type

    相似问题:http://stackoverflow.com/questions/12236909/the-package-collides-with-a-type

  4. 《只是为了好玩:Linux之父林纳斯自传》

    <只是为了好玩:Linux之父林纳斯自传> 基本信息 作者: (美)Linus Torvalds    David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:978 ...

  5. docker-3 基础命令

    创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker commit 命令,命令格式: docker commit ...

  6. keepalived+LVS搭建高可用负载均衡系统

    相关架构设置: 1)vip : 192.168.137.6 2)DS master ip : 192.168.137.8 3)DS backup ip : 192.168.137.9 4)RS 1 i ...

  7. 【log4net】配置

    第一步在 AssemblyInfo  添加如下代码 第二步:在web.config添加如下代码: <log4net> <root> <level value=" ...

  8. 怎么直接让火狐输入json数据,而不是弹出文件保存对话框?

    一.问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体验有点差.所以想怎么让浏览器直接输出到浏览器的页面上面,并且格式的输出,还可以编辑. 测试数据: ht ...

  9. IE11的API变化

    IE11已经登录Win8.1,它的API有了很大变更 一.User-agent字符串的更改 IE10的是 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT ...

  10. k-means算法初识

    基础知识: K-means聚类算法 聚类,简单地说就是把相似的东西分到一组.同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”. ...