variable declarations : let, const,and block scope

why we redefine the way about declarations?

function scope

var price = 10;  //global declaration

function showPrice(){
var price = 12; //local declaration using var
console.log(price); //12
}
showPrice(); console.log(price); //10

The next we can use IIFE to check var variable;

var price = 10;
(function(){
var price = 12;
console.log(price); //12
})();
console.log(price); //10

IIFE: Immediately Invoked Function Expression,意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数。

How to change the scope of var variable?

var price = 10;
if(price){
price = 12;
console.log(price);
}
console.log(price);

The examples demonstrates _ of var.

The example make me confusing.

var price = 10;

function showPrice(){
var price = 12;
console.log('price',price);
} showPrice();
console.log('showPrice',showPrice());
console.log(price);

the resule is

price 12

price 12

showPrice undefined

10

why have two price?

we add block scope like let and const to solve the problems.

what is block scope?

block scoping means that new scope is created between a pair of { }.

let nbr = 12;
{
let nbr = 40;
}
console.log(nbr)

1.var is bound to function scope

2.let and const are block scope

How to install preview about markdown in sublime?

1.we can use package install to install our plugins

.first use keyboard open the package istall

command+shift+p

IIFE

var price = 12;
if(price){
var price = 10;
console.log(price);
}
console.log(price);

IIFE tell us that the var declarations are bound to the function scope and does not create block scope.

var is bound to function scope, let and const are block scope.

let value = 42;
{
let value = 1000;
}
console.log(value);

let varible only read in the block scope.

const

const declarations is a immutable varible.

const value  = 50;
console.log(value); value = 1000;
const value  = 50;
console.log(value); let value = 1000;

varible hoisting

console.log(host);
var host = 89;

In my heart,it may be console 89;Actualy it is undefiend;

beacuse it is become next code in our browser

var host;
console.log(host);
var host = 89;

If you use let to declate a varible,it is err:

console.log(host);
let host =100;

I'm confusing!

TDZ(Temporal Dead Zone)

You are accessing a varible that's been declared but not yet initialized.

let data = true;
if(true){
console.log(data);
let data;
}
console.log(data);

It's print the value

undefiend

true;

But in the book ,author told me that print

ReferenceError

true

let data = true;
if(true){ //Enter new scope,TDZ starts
//uninitialized bindling for data is created
console.log(data); //ReferenceError
let data;//TDZ ends,'data' is initialized with undefined
}
console.log(data); //true

TDZs helps us ensure that a variable in runtime always have correct value.

if(ture){
console.log(typeof anUndeclaredVariable);
console.log(typeof nrandom); let random;
}

It is a good practice to always make varible declarations at the top of your scope.

This check is also useful for conditionally creating global varibles using var.

You can check if a global variable exsits by doing something like this:

if(typeof globalVariable === 'undefined'){
var globalVariable = {...};
}

const in object

You can add a property to object of const declaration but you cannot assign

a different value to object.

const obj = {};
obj.key = 42;
console.log(obj.key); obj = {};

sure,if you really want to you could make the value itself immutable by freezing it.

const obj = Object.freeze({});
obj.key = 42;
console.log(obj);

Object.freeze() is shallow.

ES6 new syntax of let and const (one)的更多相关文章

  1. JavaScript学习系列5 ---ES6中的var, let 和const

    我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...

  2. ES6中不得不说的关键字const

    上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...

  3. es6学习笔记1 --let以及const

    let语句的基本用法:  1.let声明的变量为块级作用域,只在最近的{}里面有效,如果在外部引用就会报错. { let a = 10; var b = "hello" } ale ...

  4. ES6新特性:let和const的使用

    (声明, 本文的所有代码均在node的最新稳定版本v4.4.3中执行的, 如果在浏览器中执行请把JS的运行环境提升为ES6) 以前一直用var定义变量, 现在有了两种新的定义变量的方式, 1: let ...

  5. es6重点笔记:let,const

    一,let 先看代码: var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i) }; } a ...

  6. ES6系列之变量声明let const

    ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2 ...

  7. ES6中声明变量 let和const特点

    在ES6中我们有两种定义变量的方式:let    const let特点: 1.let定义时不会进行变量声明提升 2.变量不允许被重复定义 3.变量不可以被删除 4.在for循环当中用let定义i 循 ...

  8. es6 入坑笔记(一)---let,const,解构,字符串模板

    let  全面取代var 大概相似于C++的定义,一个变量必须得先定义后使用,没有预编译 注意let的作用域,一个{}就是一个作用域,上述规则须在一个作用于内 坑:for(let i =0;i < ...

  9. ES6基本语法之let和const

    1.var可以重复声明 var a = 12; var a = 5; alert(a) //5 2.var无法限制修改 如:PI = 3.1415: 3.var没有块级作用域 { } 像: if(){ ...

随机推荐

  1. 关于Mysql DATE_FORMAT() 日期格式

    定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 语法 DATE_FORMAT(date,format) date 参数是合法的日期.format 规定日期/时间的输出 ...

  2. kvm之四:从网上镜像安装虚拟机Centos6.8

    1.再加块硬盘,格式化挂载至新建目录/kvm2下 2.CentOS 6.8镜像地址 http://mirrors.163.com/centos/6.8/os/x86_64/ 3.配置安装参数,执行安装 ...

  3. 使用Listview控件显示数据

    1.图像列表控件 ImageList是含有图像对象的集合,可以通过索引或关键字引用该集合中的每个对象. ImageList空间的属性 属性 说明 Images 存储在图像列表中的所有图像 ImageS ...

  4. Linux环境下Swap配置方法

    Linux环境下Swap配置方法 场景: 今天下午安装一个CentOS6.5操作系统,忘记配置swap分区.看看如何安装系统之后,增加和删除swap分区.方法如下:1.内存占用情况[root@josh ...

  5. C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)

    1.添加删除实体 C# ObjectARX二次开发添加删除实体是非常容易主要代码如下: 添加实体: objId = btr.AppendEntity(entity); trans.AddNewlyCr ...

  6. Beta冲刺-用户测试报告

    一.项目概述 1.1项目名称 高校学生征信系统 1.2项目简介 此项目基于SSH框架,力图为学生提供征信服务和信用相关的借款和申请活动.其中以信用统计和管理为主,信用使用为辅,构建出一个集信用收集和使 ...

  7. Android开发简易教程

    Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...

  8. 1013团队Beta冲刺day2

    项目进展 李明皇 今天解决的进度 优化了信息详情页的布局:日期显示,添加举报按钮等 优化了程序的数据传递逻辑 明天安排 程序运行逻辑的完善 林翔 今天解决的进度 实现微信端消息发布的插入数据库 明天安 ...

  9. 《javascript设计模式与开发实践》阅读笔记(12)—— 享元模式

    享元模式 享元(flyweight)模式是一种用于性能优化的模式,"fly"在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象. 享元模式的核心 ...

  10. [译]RabbitMQ教程C#版 - 工作队列

    先决条件 本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难,可以 ...