作者 | Jeskson来源 | 达达前端小酒馆

01

首先呢?欢迎大家来学习ES6入门基础let,const的基础知识内容。初始ECMA Script6。

ESMAScript与JavaScript的关系:

ES是JS的标准(ES是对ECMAScript的缩写)JS是ES的实现

ESMAScript的部分历史:

1998-06 ES2发布,1999-12 ES3发布,成为js的通行标准

2007-10 ES4草案发布

2008-07 将ES4小部分内容提取,发布为ES3.1

2009-12 ES5发布

学习let和const关键字,块级作用域

let与块级作用域

变量声明:var,直接使用

window.location.href === location.href // true
<script type="text/javascript">
var age = 11;
console.log(window.age);
</script>

let与var的主要区别

let声明的变量只在当前块级作用域内有效,let声明的变量不能被重复声明,不存在变量的提升。

02

ES6之前的作用域

全局作用域函数作用域eval作用域

块级作用域

就是一对花括号的区域

{...}

if() {}
switch() {}
for() {}
try {} catch (err) {}
{}

块级作用域可以嵌套

{
{
}
}

代表对象,不是块级作用域:

var da = {
name: dada,
}

let只作用在当前块级作用域内

{
var a = 1;
let b = 2;
}
console.log(a);
console.log(b);
{
// 1
let a = 1;
{
console.log(a); // 1
let b = 2;
}
console.log(b); // 错误
}
for(let i = o; i<3; i  ) {
};
console.log(i);

使用let或者const声明的变量,不能在被重新赋值

let不存在变量提升

console.log(da);
var da = 'dada'; console.log(dada);
let dada = 'dada';

暂时性死区

var da = '1';
{
console.log(da);
var da = '2';
}
console.log(da);
let da = '1';
{
console.log(da);
let da = '2';
}
console.log(da);

03

面试题:

生成10个按钮,点击弹出1-10:

var i=0;
for(i=1; i<=10; i ){
(function(i) {
var btn = document.createElement('button');
btn.innerText = i;
btn.onclick = function() {
alert(i)
};
document.body.appendChild(btn);
})(i);
}
for(let i = 1; i<=10; i  ) {
var btn = document.createElement('button');
btn.innerText = i;
btn.onclick = function() {
alert(i);
};
document.body.appendChild(btn);
}

const常量,不可改变的量

常量是必须要赋值的,否则报错

与let相似

不能重复声明,不存在变量提升,只在当前块级作用域内有效

常量是不可改变的?

一旦声明常量,就不能再改变?

常量为引用类型的时候,不能保证不可变

解决引用类型,不可保证不可变

const只能保证地址的指向不改变,但是不能保证地址上的值不能改变

怎么去防止常量去引用类型的时候能被修改的情况

Object.freeze(); // 冻结

es6之前声明常量

var Da = '123';

Object.defineProperty();

Object.seal(); // 防止对象被扩展

hasOwnProperty()自身的属性

seal(),defineProperty(),hasOwnperty(),freeze()。

Object.freeze() 方法可以冻结一个对象。

一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。freeze() 返回和传入的参数相同的对象。

const obj = {
prop: 42
}; Object.freeze(obj); obj.prop = 33;
// Throws an error in strict mode console.log(obj.prop);
// expected output: 42

hasOwnPreperty()剔除原型链上的属性,如果是true,说明不是原型的属性

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

obj要在其上定义属性的对象。prop要定义或修改的属性的名称。descriptor将被定义或修改的属性描述符。

Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。

const object1 = {
property1: 42
}; Object.seal(object1);
object1.property1 = 33;
console.log(object1.property1);
// expected output: 33 delete object1.property1; // cannot delete when sealed
console.log(object1.property1);
// expected output: 33

推荐阅读

1、你知道多少this,new,bind,call,apply?那我告诉你

2、为什么学习JavaScript设计模式,因为它是核心

3、一篇文章把你带入到JavaScript中的闭包与高级函数

4、大厂HR面试ES6中的深入浅出面试题知识点

5、一篇JavaScript技术栈带你了解继承和原型链

关于目前文章内容即涉及前端,PHP知识点,如果有兴趣即可关注,很荣幸,能被您发现,真是慧眼识英!也感谢您的关注,在未来的日子里,希望能够一直默默的支持我,我也会努力写出更多优秀的作品。我们一起成长,从零基础学编程,将 Web前端领域、数据结构与算法、网络原理等通俗易懂的呈现给小伙伴。分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯。

若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。

请点赞!因为你们的赞同/鼓励是我写作的最大动力!

欢迎关注达达的CSDN!

这是一个有质量,有态度的博客

ES6基础入门之let、const的更多相关文章

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

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

  2. es6语法入门let 和 const 命令

    let块级作用域 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b for循环的计数器,就很合适使用let命令(防 ...

  3. ES6 基础知识-----简记 let const

    ES5中只有函数作用域和全局作用域,声明变量使用var,在es6中添加声明变量 let const let 声明块级作用域变量, let 不存在变量提升 var命令会发生”变量提升“现象,即变量可以在 ...

  4. ES6基础之let、const

    es6的块级作用域通俗的讲就是一对花括号中的区域(声明对象的花括号不是块级作用域),块级作用域可以嵌套. let: 1.le声明的变量只在当前(块级)作用域内有效. 2.let声明的变量不能被重复声明 ...

  5. es6基础入门变量的解构赋值

    let [a, b, c] = [1, 2, 3]; let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar baz let [ , , third] = [ ...

  6. 《ES6标准入门》(阮一峰)--2.let 和 const 命令

    1.let命令 基本用法 let只在命令所在的代码块内(花括号内)有效. for循环的计数器,就很合适使用let命令. //var var a = []; for (var i = 0; i < ...

  7. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  8. python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)

    BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...

  9. ES6基础-ES6的扩展

    进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展. 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符 ...

随机推荐

  1. C# Mysql数据库备份、还原(MVC)

    一.准备工作 1.电脑上要安装上mysql,并且已经配置好了环境变量. 二.公共代码 1.配置文件(该节点只是为备份.还原使用,数据库连接字符串有另外的节点) <connectionString ...

  2. 笔记:Java Language Specification - 章节17- 线程和锁

    回答一个问题:多线程场景下,有时一个线程对shared variable的修改可能对另一个线程不可见.那么,何时一个线程对内存的修改才会对另一个线程可见呢? 基本的原则: 如果 读线程 和 写线程 不 ...

  3. C#文件操作之把字符串取到文本文件及把文本文件读取到字符串中

    一.把字符串读取到文本文件中 using (FileStream fs = new FileStream(Path, FileMode.OpenOrCreate))//把json读到一个文本中 { S ...

  4. HTNL5-ARIA role属性

    WAI-ARIA Web Accessibility Initiative’s Accessible Rich Internet Applications 无障碍网页倡议–无障碍的富互联网应用,也简称 ...

  5. Vue学习之Webpack小结(十二)

    一.nrm: nrm是专门用来管理和快速切换私人配置的registry; nrm提供了一些最常用的npm包镜像地址,能够让我们快速的切换安装包时候的服务器地址: 二.镜像: 原来   包    刚一开 ...

  6. git 从远程克隆代码并实现分支开发,合并分支,上传本地代码到远程

    首先确认你已经安装了git 1.克隆远程代码到本地的操作 git clone 地址   打开git操作命令行 鼠标右键点击        复制需要克隆的项目的地址类似下面的ssh     输入命令进行 ...

  7. Java 初识

    一.Java 简介 1.什么是 Java Java 语言是美国 Sun 公司(Stanford University Network),在1995年推出的高级的编程语言,所谓编程语言,是计算机的语言, ...

  8. docker下安装redis集群

    docker-compose.yml master: image: redis:4 container_name: redis-cluster_master command: redis-server ...

  9. FreePascal - Typhon如何添加不能识别单元?

    Typhon 32位 6.9 问题:想使用LSUtils单元,这个单元在Lazarus里面,直接引入就可以使用,而且单元头注释明显写明是CodeTyphon工程的一部分,那么正常在Typhon只要引入 ...

  10. React 性能优化之组件动态加载(react-loadable)

    React 项目打包时,如果不进行异步组件的处理,那么所有页面所需要的 js 都在同一文件中(bundle.js),整个js文件很大,从而导致首屏加载时间过长. 所有,可以对组件进行异步加载处理,通常 ...