程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

    • es6

      • es6基础
      • es5的扩展
      • let和const命令
    • 基础
    • 运算符和数组
    • 函数
    • 对象和类型
    • 数据类型
    • js接口
    • DOM案例
    • 节点操作
    • BOM接口
    • 页面操作
    • 动画和轮播图
    • 本地存储
    • js面向对象
    • es6
      • es6
      • 作用域
        • 块级作用域
        • 申明变量区别
        • 作用域链
      • 闭包
      • 预解析
        • 变量提升
        • 函数预解析
        • 误区示例
      • es6 函数
        • 参数默认值
        • 动态参数
        • 剩余参数-...
        • 箭头函数
      • 解构赋值
    • ES6
    • js面向对象1
    • js面向对象2
    • js面向对象3
  • GO

  • 正则表达式

  • java

  • TypeScript

  • react

  • 前端知识

  • jQuery

  • Python

  • C和C++

  • 前端和后端
  • JavaScript
yuadh
2022-02-12
目录

es6

# es6

# 作用域

作用域(scope)规定了变量能够被访问到的范围,离开了这个范围变量便不能被访问,作用域分为全局作用域和局部作用域

# 块级作用域

es6的概念 , 用{} 内的代码快

注意

var 声明的变量不具有块级作用域作用

# 申明变量区别

  • let
  • var
  • const

var 声明的变量不具有块级作用域、let具有块级作用域

var 申明变量,可以重新定义申明变量名 、let不行

var 申明的变量,相当于window添加属性,let直接就是变量

const 申明的变量不能改变所以称为常量

# 作用域链

对变量的正确赋值使用

function fn(){
    function fun(){
        consolo.log(m);
    }
}
1
2
3
4
5

如果当前作用域不存在一个变量,就会向上级作用域查找

函数执行时会开辟一个空间,函数内部也可以开辟空间--形成作用域链

作用域链: 由作用域链串联起来的链状结构

误区示例

case 1

let num = 1;
function f1(){
    num=2;
    function f2(){
        num = 3;
    }
    f2();
}
f1();
console.log(num);//3
1
2
3
4
5
6
7
8
9
10

case 2

let num = 1;
function f1(){
    let num=2;
    function f2(){
        num = 3;
    }
    f2();
}
f1();
console.log(num);//1
1
2
3
4
5
6
7
8
9
10

函数内的代码需要调用才会执行

case 3

let num = 1;
function f1(){
    num=2;
    function f2(){
       let num = 3;
    }
    f2();
}
f1();
console.log(num);//2
1
2
3
4
5
6
7
8
9
10

# 闭包

闭包:一个作用域有权访问另一个作用域的局部变量

作用:延伸变量的使用范围

function f1(){
    let num = 1;
    return function f2(){
        console.log(num);
    }
}
const b = f1();
b();//1
1
2
3
4
5
6
7
8

回调函数

function fn(a){
    let num=1;
    a(num);
}
fn(function (n){console.log(n);});
1
2
3
4
5

# 预解析

console.log(n)//undefined
var n=2;
fn()//2
function fn(){
    console.log(n)
}
1
2
3
4
5
6

预解析:在代码执行之前,先要预解析,解析变量和函数

# 变量提升

变量会把代码声明的变量,提前解析到作用域最前面

只定义,不赋值

注意

let 申明的变量需要初始化 (会预解析但无法使用)

# 函数预解析

会把代码中具有名字的函数提前解析,解析到作用域最前面

只定义,不调用

注意

函数优先

# 误区示例

case 1

console.log(n);//undefined
fn();
var n = 3;
function fn(){
    cosole.log(n);//undefined
    var n = 6;
}
1
2
3
4
5
6
7

case 2

console.log(a);//function a(){}
function a(){}//函数优先
var a = 2;//覆盖
console.log(a);//2
1
2
3
4

# es6 函数

# 参数默认值

形参没有接收实参,那么形参的值是 undefined

es6 可以设置参数的默认值

function f(uname='yuadh',uid=404){}
1

# 动态参数

arguments 是一个伪数组 ,对应的实参

function f(){
    
}
f(1,2,3,4);
1
2
3
4

函数内置 arguments

# 剩余参数-...

概念1

function f(a,b,c,d,e,f){
    console.log(a,b,c,d,e,f);//undefined,2,3,4,5,6
}
f(,2,3,4,5,6)
1
2
3
4

概念2

function f(a,b...c){
    console.log(a,b,c);//1,2,[3,4,5,6]
}
f(1,2,3,4,5,6)
1
2
3
4
function f(...a){
    console.log(a);//真数组相当于 arguments
}
f(1,2,3);
1
2
3
4

# 箭头函数

let fn = function  (a,b){}
let fn = (a,b) => {}
1
2

省略极简形式

  • 只有一个参数可以省略括号
  • 只有一行代码可以省略大括号,会自动返回结果
let fn = a => a*a;
console.log(fn(6));//36
1
2

应用场景

  1. 定时器 函数
window.setInterval(()=>{...},1000)
1

注意

  • 箭头函数里不存在 arguments ,使用剩余函数代 替 ...arg

  • 箭头函数中不存在 this ,而箭头函数中的 this 指向所在定义域的 this - let f

    let obj = {
                uname: 'yuadh',
                age: 22,
                f: function() {
                    window.setInterval(function() {
                        console.log(this);
                    }, 1000)
                }
    }
    obj.f();//window
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let obj = {
                uname: 'yuadh',
                age: 22,
                f: function() {
                    window.setInterval(() => {
                        console.log(this);
                    }, 1000)
                }
            }
    obj.f();//obj
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • 如果涉及到 this 调用时 ,尽量不要使用箭头函数

    let btn = document.querySelector('input')
    btn.addEventListener('click',()={
        this.style.background = 'red'; //报错 指向对象是 window
    })
    
    1
    2
    3
    4

# 解构赋值

解构赋值:解开数据解构赋值给变量

  • 数组解构
let [a,b,c,d]=['yuadh','ed','ee','zz']
console.log(a,b,c,d);\\
1
2

case 1:变量多值少

前边的值一一对应、未赋值的变量为 undefined

case 2:变量少值多

一一对应

case 3:按需取值

let [,,a,b] = ['yuadh','ed','ee','zz']
//
let [,a,b,[,c,d]] = ['yuadh','ee','zz',['yy','dd','hh']]
1
2
3

case 4:剩余值

let [,a,b,...c]=['yuadh','ee','zz','yy','dd','hh']
console.log(a,b,c)//out - ee zz Array(3) [ "yy", "dd", "hh" ]
1
2
  • 对象解构赋值

    把属性名当作比变量名即可

let {uname,age} = {
    uname : 'yuadh',
    age:22,
    sex:'man',
    index:1
}
//可通过 `uname:username` 给变量改名字
console.log(username,age);//out - 'yuadh' ,22
1
2
3
4
5
6
7
8

up

let {dog:{uname}} = {
    uname : 'yuadh',
    dog : {
        uanme:'z',
        age : 1
    },
    age:22,
    index:1
}
console.log(uname);//out - z
1
2
3
4
5
6
7
8
9
10

使用

function person({uname,age,sex}){
    console.log('woshi${uname}zz${age}dc${sex}');
}
person({{uname:'yuadh',age:22,sex:'man'})
1
2
3
4
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
js面向对象
ES6

← js面向对象 ES6→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×