let关键字

let关键字和var关键字一样,都是用来声明变量的,但是和var不同的是,let关键字声明的变量仅在自己的块级作用域范围内发挥作用。

我们来比较下面两段代码

var arr = new Array();
for(var i = 0; i < 10; i++){
arr[i] = function(){
console.log(i);
}
}
arr[0]();//10

上面一个程序中,我们本意是定义一个数组,每个数组的元素是一个函数,可以打印出数组的下标,但是无论调用数组中的哪一个函数,输出的都是10。

var arr = new Array();
for(let i = 0; i < 10; i++){
arr[i] = function(){
console.log(i);
}
}
arr[0]();//0

这个程序和上面一个程序的唯一的不同,就是在声明变量i时我们使用了let关键字而不是var关键字,然而我们得到了想要的结果。这是由于let关键字只能在自己的块级作用域中发挥作用,出了它的块级作用域就不再发挥作用了。(块级作用域,简单的来说就是用{}大括号包含的部分)

除了只能在块级作用域发挥作用外,let关键字还有另外的特点,第二点就是不存在变量提升,而var关键字存在变量提升。

function foo(){
console.log(a);
var a;
}
foo();

上面这个程序中,会打印出undefined,而使用let关键字,则会报错。

function foo(){
console.log(a);
let a;
}
foo();

这是由于var关键字的变量提升,变量提升可以理解为解释器在作用域内先寻找var关键字,将用var声明的变量先存储在内存中,然后再一步一步的执行代码。第一个实例相当于将var a;这一行代码放到console.log()这一行的上面。而let关键字不存在变量提升,因此在程序执行到console.log()时,在内存找不到a的地址,因此会报错。

除此之外,使用let关键字时要注意两个要点:

  1. 同一个块级作用域内不能重复声明同一个变量
var a = 0;
let a = 0;

上面这段程序会报错,同样,用两个let关键字声明同一个变量也是不允许的。

let a = 0;
let a = 0;

2.函数中不能用let关键字重新声明函数的参数。

function foo(a){
let a = 0;
console.log(a);
}

像这样是不允许的。

const关键字

const关键字时用来声明一个常量的,即不能修改的值。

const a = 0;
a = 1;

上面这种做法是错误的,它试图给常量a赋一个新值。

此外,const常量还有其他几个特点:

1.const关键字声明的常量不能修改

2.const关键字和let关键字一样,只能在自己的块级作用域内发挥作用

3.和let一样,不存在变量提升,而且和let不同的是,const关键字声明时必须赋值

4.和let一样,不能重复的声明同一个变量。

有了const关键字,我们还可以创建一个常量对象

const car = { "type" : "van" };
car.price = 30000;
car.type = "tractor";

我们会发现,这段程序不会报错,但是我们确实修改了car这个常量。这是因为,javascript中是使用传址赋值的方式,所谓的传址赋值,就是在赋值过程中,变量存储的实际上是数据的地址,即对数据的引用,而不是原始的数据或者数据的拷贝。我们在声明car变量时,分配了地址,增添或者修改car的属性不会改变它所在的地址,因此不会报错。而如果像下面这样

const car = {type:"van"};
car.type = "tractor";
car.price = 30000;
car = {};

这个程序试图给car赋一个新值{},则会报错。

ECMAScript6之let与const关键字的更多相关文章

  1. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  2. C++中const关键字的使用总结

    C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...

  3. final关键字+const关键字

    final关键字 1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑),可以使用final. 例题 <? final class A{} class B extends A{};//会报 ...

  4. C++学习11 类和new、delete操作符 类与const关键字

    如果你是Java.C#.PHP程序员,那么会对 new 非常熟悉,在这些编程语言中,只能通过 new 来创建对象. 在C++中,你可以像定义变量一样来创建对象,如: Student stu; //对象 ...

  5. C++中的const关键字

    http://blog.csdn.net/eric_jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方 ...

  6. 陈正冲老师讲c语言之const关键字

    1.const 关键字也许该被替换为 readolny const是constant的缩写,是恒定不变的意思,也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被const修饰的值是常量.这是 ...

  7. C语言之头文件,static与const关键字

    [前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔 ...

  8. static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

  9. const关键字详解

    const在函数前与函数后的区别 一   const基础         如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:         int   b   =   500; ...

随机推荐

  1. Bootstrap面包屑导航

    Bootstrap中提供了面包屑导航的实现方法: 只需要引入bootstrap.css文件即可. 主要引用的样式有: .span6 .breadcrumb 实例代码如下: <!DOCTYPE h ...

  2. 使用Eclipse开始Java编程

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/start-java-programing ...

  3. iOS基础 - Quartz 2D绘图的基本步骤

    一.使用Quartz 2D绘图的基本步骤 1) 获取上下文context(绘制图形的地方) 2) 设置路径(路径是用来描述形状的) 3)  将路径添加到上下文 4)  设置上下文属性(设置颜色,线宽, ...

  4. 【学习笔记】锋利的jQuery(一)选择器

    一.要点阐述 1,jQuery创建于2006年1月的一个开源项目,强调理念是“write less,do more”,压缩后大小30KB左右.. 2,jQuery里的方法都被设计程自动操作对象集合,而 ...

  5. 【ios开发】自定义Actionsheet实现时间选择器和省市区选择器

    最近的工程有一个个人资料页面,需要填写生日和地区的信息,需要自己定义个actionsheet. 但是到网上搜了一下都不太合适,只好自己研究研究,重写了一个.共享出来给大家用用,突然发现自己精神很高尚吗 ...

  6. 苹果APNs’ device token特性和过期更新

    APNs全名是Apple Push Notification Service.用iPhone的应该都习惯了,每次安装完一个新应用启动后,几乎都会弹出个警告框,“XXX应用”想要给您发送推送通知.这个警 ...

  7. GTK+编程概述

    目标 什么是GTK? 怎样做一个GTK应用程序 事件(Events).信号(Signals).回调函数(Callbacks) 组件(widgets) 引言 GIMP工具包(GTK+)最初被设计为一个光 ...

  8. 区别CSS中display:box;inline;none以及HTML中 <frame> 标签<table> 标签的 frame 属性

    区别display:box:display:inline:display:none三者的不同 display:block的特点是: block是Display默认的值.总是在新行上开始:该对象随后的内 ...

  9. NodeJS的url信息截取模块url-extract

    NodeJS的url信息截取模块url-extract2013-09-12 22:49 by Justany_WhiteSnow, 212 阅读, 0 评论, 收藏, 编辑 上一篇文章,介绍了怎么利用 ...

  10. WPF制作的小型笔记本

    WPF制作的小型笔记本-仿有道云笔记 楼主所在的公司不允许下载外部资源, 不允许私自安装应用程序, 平时记录东西都是用记事本,时间久了很难找到以前记的东西. 平时在家都用有道笔记, 因此就模仿着做了一 ...