ES6基础

作者: 苏码码 | 来源:发表于2021-08-25 10:08 被阅读0次

1、Babel转码器
Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行,这意味着,你可以用ES6的方式编写程序,又不用担心现有的环境是否支持

//转码前
var $ = name => document.querySelector(name)
// 转码后
var $ = function(name) {
 return document.querySelector(name)
}

上面的ES6代码用了箭头函数,Babel将其转为普通函数,就能在不支持箭头函数的javaScript环境上执行了

2、let和const命令
2.1、let的定义
ES6新增了let命令,用来声明变量,他的的用法类似于var
2.2、let 和 var的不同
2.2.1、let不存在变量提升

console.log(a) // => undefied
var a = 10

console.log(b) // => b is not a defiend
let b = 3

2.2.2 let同一个作用域内不能定义相同名称的变量

let a = 1
let a = 2
console.log(a) // => Identifier 'a' has already been declared

2.2.3 let 块级作用域 var 函数作用域

function fun () {
  var a = 3
  if (true) {
  let a = 4
}
console.log(a) // => 3
}
fun()

function f(a) {
  let a = 10
 console.log(a)  // => Identifier 'a' has already been declared
}
f()

2.2.4 块级作用域的重要性

for(var i = 0; i < 5; i++){}
console.log(i) // i=>5

for(let i = 0; i < 5; i++){}
console.log(i) // i=> i is not defined

var arr = []
for(let i = 0; i < 5; i++){
  arr[i] = function(){
      console.log(i)
  }
}
arr[4]()   // => 4

2.2.5 暂时性死区

function f3(i) {
  let i;
  console.log(i)  //  Identifier 'i' has already been declared
}
f3(10)

let x = y, y= 10
function f4(){
  console.log(x, y)
}
// y is not defined

// 常见错误

//  1、
function f(a) {
  let a = 10
console.log(a)  // => Identifier 'a' has already been declared
}
f()
// 2、
function fun() {
  let a = 3;
  if (true) {
      a = 5;
      console.log(a)  // 报错
    let a;
  }
}
fun();
// 3、
let a = b, b = 10
console.log(a,b) // b is not defined

3、const的定义
const声明一个只读的常量,一旦声明,常量的值不能更改。
保持let的不存在变量提升,同一个作用域内不能重复定义同一个名称,有着严格的作用域

3.1、修改常量的值会报错

const a = 10
a = 20   // =>  Uncaught TypeError: Assignment to constant variable.

//  const只声明不赋值就会报错
const m;  // 会报错的

3.2 const 的坑
const实际上保证的,并不是变量的值不得改动,而是指变量指向的那个内存地址所保存的数据不得改动,对于简单类型的数据(数字,字符串,布尔值),值就是保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型数据(主要是对象和数组),变量指向的内存地址,保存的指示一个指向实际数据的指针,const只能保证这个指针的固定的(即总是指向一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了,因此将一个对象声明成常量必须非常小心。

// 常量obj储存的是一个地址,这个地址指向一个对象,不可变的只是这个地址,即不能把obj指向另一个地址,但对象本身是可变的,所以依然可以为其添加属性
const obj = {}
obj.name = 'abc' // 正确
obj = {id:123} // 错误

const arr = [];
arr.push(2) // 正确
arr = [2] // 错误

相关文章

  • ES6基础语法

    ES6基础语法

  • JavaScript进阶

    一、ES6基础 1. ECMAScript 6 简介 ECMAScript(ES6) 是JavaScript语言的...

  • <ES6>总结:知识点

    一、ES6基础: 1、ES6的配置: 在WebStorm中,打开设置,按照如下,找到JavaScript:Lang...

  • 数组去重

    基础类型数组去重 ES5 ES6 复杂类型数组去重 ES5 ES6

  • es6基础知识3(迭代)

    title: es6基础知识3(迭代)tags: 迭代categories: 前端 1. 迭代器 es6中新增了迭...

  • webpack 4.0 基础配置

    基础配置主要包括: webpack 基础配置安装 webpack 打包后的配置 html 插件 样式处理 es6 ...

  • react基础入门:(一)原生JS基础测试

    原文链接:react基础入门:(一)原生JS基础测试 以下问题都是以es6为基础 一 基础 有哪些数据类型? 字符...

  • 来,用ES6写个Promise吧

    本文采用es6语法实现Promise基本的功能, 适合有javascript和es6基础的读者,如果没有,请阅读 ...

  • es6-selfnote

    ECMAScript6(ES6)基础知识及核心原理 使用Babel编译ES6 一、下载安装Babel环境:需要电脑...

  • ES6入门基础

    ES6入门基础 一.let & const 1.基本用法 es6新增 let命令,用来申明变量,用法类似于var,...

网友评论

      本文标题:ES6基础

      本文链接:https://www.haomeiwen.com/subject/hzpllltx.html