ES6中新增声明变量的关键字:let、const
let的使用:
- 不可以重复定义,可以重新赋值
- 不能进行预解析、变量提升
- 块级作用域
- 不在window上
const创建变量的使用:
- 创建的是一个常量(不可改变的量)
- 不可以重新定义和赋值的!!!
- 不能进行预解析、变量提升
- 块级作用域
- 不在window上
同步和异步的概念:
- 同步:做完一件事情后才能去做另一件事情
- 异步:可以同时去做多件事情
永远都是同步先执行 当同步执行完毕后才会执行异步代码
- 同步代码: js代码
- 异步代码: js代码中一些特殊情况 延时器、定时器
箭头函数:为了简写之前学习的函数(只有匿名函数才可以写成箭头函数)
函数的创建方式
- 声明式 function fn(){}
- 赋值式 var fn = function(参数){执行的代码} 匿名函数
箭头函数的写法:
- var fn = (参数) => {执行的代码}
有多个参数时:
参数只有一个时:(小括号可省略)
拓展:再简写 大括号也可以删了:大括号内如果只有一句代码的时候 大括号和return都可以删除
箭头函数的特点:不支持arguments,不绑定this,没有自己的this 使用外部的this。
何时用箭头函数:
// 1、不涉及this绑定时,如果在函数中 需要明确的this绑定 则不能或者不推荐用箭头函数,例如 事件函数不要用箭头函数、
// 2、回调函数 由第三方调用 一般没有明确this(window), 可以箭头函数,例如 很多高阶方法(forEach、map、find等)
函数的自执行(自执行函数、立即调用):任何在执行的时候都会创建一个执行上下文(语境),因为函数声明的变量只能在函数的内部使用 这时候上下文在调用函数的时候 就可以给我们创建自由或者私有变量进行使用
执行上下文的解释(js代码执行的环境):
- 全局执行上下文:浏览器创建 window
- 函数执行上下文:谁调用我 我就指向谁 - 调用栈
- eval执行上下文:js不推荐使用 不做讨论
自执行函数的用法:
- 只有匿名函数才能使用自执行方式
自执行如何去写:
- 匿名函数 var fn = function(){}
- 自执行就表示打开浏览器的时候直接调用函数
注意:
- 写自执行函数的时候 要把函数体用一个小括号包起来 函数表达式
- 函数自执行为什么要用?
解构赋值:快速的将对象中的每个值拿到然后再赋值给一个变量
- var/let/const {变量名称1,变量名称2,...} = 对象名称
注意:
- 变量名称要和对象中的键名字一样
- 给变量名取别名 var/let/const {变量名称1:别名1,变量名称2:别名2,...} = 对象名称
解构赋值-数组
- var [变量名称1,变量名称2,...] = 数组名称
模板字符串:` ` (反引号)
关于模板字符串的好处:
- 方便好用 可以在当前的反引号随意书写
- 重点: 可以不再用字符串拼接获取到你的数据 可以使用一个方法解析变量 ${变量名称}
对象的简写:
字符串新增的方法:
字符串.startsWith(字符) // 判断字符串是否由某个字符开头
字符串.endsWith(字符) // 判断字符串是否由某个字符结尾
字符串.includes(字符) // 判断字符串是否包含某个字符
展开/合并运算符: ...
- 将数组展开显示 ...数组名字
合并运算符:
this的指向问题:
- 在普通函数中指向 window
- 在事件函数中指向 事件源
- 在定时器中指向是 widnow
- 在自执行函数中指向 window
箭头函数中是没有this指向的 往上级查找
改变this指向的方法一:call方法
- 函数.call(想要改变的指向 - 指向谁写谁)
- 如果需要传参的时候 在参数1后面书写其他参数即可
改变this指向的方法二:apply方法
- 函数.apply(想要改变的指向 - 指向谁写谁)
- 如果需要传参的时候 在参数1后面书写其他参数即可
改变this指向的方法三:bind方法
- 函数.bind(想要改变的指向 - 指向谁写谁)
- 如果需要传参的时候 在参数1后面书写其他参数即可
- bind方法相当于把当前的函数复制了一份 需要用一个新的变量进行接收
伪数组:
- 伪对象(伪元素):假的标签结构 虚拟的dom结构
- 伪类:hover 改变元素状态
伪数组:真实开发中基本不用 但是面试会经常文伪数组是什么 和数组之间的区别是什么
- 伪数组看起是数组 但是本质不是数组 本质是对象
- 伪数组最常表现的形式是获取dom结构 don结构的集合就是最常见的伪数组
参考答案:伪数组和真实数组的区别是什么?
- 真实数组是可以改变长度的 伪数组不可以
- 真实数组是可以使用方法的(push、pop) 伪数组不可以
- 真实数组的本质就是数组 伪数组的本质是对象
如何把伪数组转换为真实的数组呢?