在es5中一般经常使用的变量有两个级别,一个是用var声明的全局级别的变量,另外一个是函数级别是用var生命在函数内的。本文中将详细讲解我对es6中的const和let的区别。

let的使用以及作用范围

let是块级变量,只有在自己声明的内部才会有作用。

'use strict';
{
var a = 12;
let b = 15;
{
console.log(a, b)//12 15没有问题的。
}
}
console.log(a,b) //12 defined a是全局变量在哪里输出都没有问题,然而b是块级变量所以只有在声明b的内部才会有效。

let的提升。下列代码中证明了let没有被提升 var 被提升了。

'use strict';
function fun() {
// var a 相当于a提升到了这里定义了,但是未赋值。
console.log(a, b); //undefined defined 注意a是没有被赋值,而b是未定义,这说明a是向上提升了而b却没有提升。
// a = 12; a相当于在这里赋值了、
var a = 12;
let b = 'b';
}
fun();

let的提升以及作用范围。

'use strict';
var a = 12;
function f() {
console.log(a); //defined 因为在函数外部声明了a,然后在函数内部又声明了a,此时函数外部的a就会失效,但是函数内部的a又没有提升的功能所以会输出未定义;
let a = 100;
}
f();

使用let代替匿名函数立即执行

'use strict';
(function () {
var config = [];
config.push(1);
config.push(2);
config.push(3);
console.log(config) //1, 2, 3
})();
let configs;
{
configs = [];
configs.push(4);
configs.push(5);
configs.push(6);
console.log(configs) //4, 5, 6
}

const的使用

const是常数顾名思义,就是声明后无法修改的。请看下面的例子。

const的提升和作用范围和let几乎一样,在这里就不做过多的例了。

'use strict';
const a = {
name: '铅笔'
};
a = 100; //此时会报错

常量不代表所以得东西不能修改,除了a = 这个指向不能修改 a对象内部的属性和值都是可以修改的。

'use strict';
const a = {
name: '铅笔'
};
a.name = '黑白';
a.email = '48988840@qq.com';
console.log(a); // {name : '黑白, email : '48988840@qq.com'}

怎么让a和内部的东西不能修改呢?

'use strict';
const a = {
name: '铅笔'
};
Object.freeze(a); //a内部的所有属性和值都不能修改了。
a.name = '黑白'; // 报错
a.email = '48988840@qq.com'; // 报错
console.log(a); // {name : '黑白, email : '48988840@qq.com'}

var、let、const的区别,以及作用范围。的更多相关文章

  1. var let const 的区别

    Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2. ...

  2. 【前端面试】(四)JavaScript var let const的区别

    视频链接: JavaScript var let const的区别 - Web前端工程师面试题讲解 参考链接: JavaScript 变量 JavaScript Let JavaScript Cons ...

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

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

  4. let、var、const用法区别

    1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123  2.let let 声明 ...

  5. JS中let、var、const的区别

    先看let和var: 1. console.log(a); // undefined var a = 3; console.log(a); // Uncaught ReferenceError: Ca ...

  6. ES6中var/let/const的区别

    let的含义及let与var的区别: let 声明的变量只在它所在的代码块有效: 如下: for (let i = 0; i < 10; i++) { console.log(i); } con ...

  7. var let const的区别

    1. 变量提升: 浏览器在运行代码之前会进行预解析,不论var声明的变量处于当前作用域的第几行,都会提升到作用域的头部.   2. 只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不 ...

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

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

  9. 【ES6 】var/let/const的区别

    var 声明变量 没有区级作用域 可以预解析 可以重复定义 声明的全局变量属于顶层对象(window)的属性 let 声明变量 有块级作用域 没有预解析 不可以重复定义 声明的全局变量不属于顶层对象( ...

随机推荐

  1. Privacy Policy of ColorfulBroswer

    Personal information collection this app does not collect your data  and does not share your infomat ...

  2. poj 1006 Biorhythms (中国剩余定理模板)

    http://poj.org/problem?id=1006 题目大意: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这 ...

  3. 201621123023《Java程序设计》第11周学习总结

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 二.书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallRun ...

  4. 深入了解java虚拟机(JVM) 第十章 字节码指令

    一.字节码指令的含义 Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数).此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实 ...

  5. 【Oracle 12c】CUUG OCP认证071考试原题解析(30)

    30.choose the best answer Examine the commands used to create DEPARTMENT_DETAILS and COURSE_DETAILS: ...

  6. [bzoj4712]洪水 线段树+树链剖分维护动态dp+二分

    Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地爬 ...

  7. delphi 10.2 ----简单的递归函数例子求和

    unit Unit10; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  8. Linux之Ubuntu系统安装搜狗输入法

    如何在Ubuntu系统中安装搜狗输入法? 1.第一步  下载搜狗输入法文件for Linux 2.检查更新 update 如果没有更新的话,需要做这一步 3.语言支持 选择fcitx,然后关闭界面 4 ...

  9. jenkins发送测试报告邮件

     1.安装插件 Email Extension Plugin 2.设置Extended E-mail Notification a."系统管理"--“系统设置”.配置Extende ...

  10. main:处理命令行选项

    有时我们需要给main函数传递实参, 我们可以把命令行选项通过两个形参传递给main函数: int mian(int argc, char *argv[]) { ... }; argv是argumen ...