this
是js中的关键字,在不同的作用域中,代表的含义是不同的
具体含义:
全局的this --> window
普通函数的this --> window
定时器函数的this --> window
自调用函数的this --> window
对象的方法的this --> 这个对象
事件函数里的this --> 这个元素
箭头函数里的this --> 上级作用域中的this
this的理解:
函数定义不能确定this含义,取决于调用形式
改变this的含义:
call -- 函数.call(新的this含义,给函数传实参) ---- 调用函数并改变this -- 可以精准的检测数据类型 -- {}.toString.call(数据) -- [object 构造函数名字]
apply -- 函数.apply(新的this含义,[给函数传实参]) ---- 调用函数并改变this -- 可以将伪数组转成数组 -- [].slice.call(伪数组)
bind -- 函数.bind(新的this含义) -- 返回新的函数 -- 复制函数并改变this -- 新函数中的this和原函数中的this不同
ES6新增
定义变量的关键字 let和const
const:
定义就必须赋值
值不允许改变
所有const也被叫做常量
let和const跟var的区别
let和const
都不能预解析
都不能重复定义
都自带块级作用域:
循环中执行异步代码或绑定事件,在异步代码中或者事件中,可以使用循环的变量
全局中的let和const定义的变量不在window中
模板字符串 -- 使用反引号定义字符串
可以多行定义一个字符串
在控制台多行显示
`<tr>
<td></td>
<td></td>
<td></td>
</tr>
`
在字符串中通过${变量名}直接解析变量,不用拼接
`我的名字叫${name}`
对象简写 -- 当对象的键和值所使用的变量名同名,就可以简写
var age = 12
var obj = {
name,
age
}
等同于
var obj = {
name: name,
age: age
}
当对象的键对应的值是匿名函数,就可以简写
var obj = {
eat() {}
}
等同于
var obj = {
eat: function() {}
当对象的键对应的值是匿名函数,就可以简写
var obj = {
eat() {}
}
等同于
var obj = {
eat: function() {}
}
箭头函数 -- 对匿名函数简写
() => {}
当只有一个形参的时候,可以省略小括号
大括号中只有一行代码的时候,可以省略大括号
如果这行代码中有return,必须省略return
形参默认值 -- 在定义的函数的时候,给形参直接赋值,表示在函数内这个参数就算没有实参给他赋值,他也有默认值
解构赋值 -- 快速的批量的定义变量,并拥有对象或数组中的值
var {键1, 键2} = 对象 -- 定义了两个变量,变量名分别是键1,键2,值是对象中这两个键对应的值
var {键1: 新的变量名} = 对象 -- 定义了一个变量,变量名是新的变量名,值是键1在对象中对应的值
var {键1: {键2}} = 对象 -- 定义了变量,变量名是键2,值是对象.键1中 键2对应的值
var [变量名] = 数组 -- 定义变量,值是数组的第一个元素
var [[变量名]] = 数组 -- 定义变量,值是数组中第一个数组中的第一个值
展开合并运算符 -- ...数组名
当他作为实参的时候,是将一个数组,展开成多个值
将一个对象展开成多个键值对
当他当做形参的时候,是将多个实参收集成一个数组