this关键字:
是js中的关键字,在不同的作用域中,代表的含义是不同的
一、具体含义:
1、全局:window
2、普通函数:window
function fn() {
console.log(this);
}
console.log(this);
window.fn() // window
3、定时器函数:window
// 定时器函数中的this
window.setTimeout(function() {
console.log(this);
})
console.log(this);
window.fn() // window
4、自调用函数:window
(function() {
console.log(this);
})() //winodw
5、对象方法: 对象
6、时间函数:标签
7、箭头函数:上级作用域中this
二、改变:
1、call方法:
函数.call(新的this含义, 给函数传实参)
函数.call() - 就可以调用函数了
函数.call(参数1) - 就可以调用函数了,并且函数中的this就变成了参数1
函数.call(参数1, 参数2, 参数3, ...) - 就从参数2开始是在给函数传递实参
function fn() {
console.log(this)
}
fn() // window
fn.call(document) // document
2、apply方法:
函数.apply(新的this含义, [给函数传实参])
apply和call的作用是相同的,唯一不同的地方,在于传递实参。
call在调用函数时,给函数传递实参,是从call的第二个参数开始传递;apply给函数传递实参,是将所有实参组成一个数组作为apply的第二个参数传递的:
function fn(a, b) {
var c = a + b
console.log(c)
console.log(this)
}
fn(1, 2) // 3 window
fn.apply(document, [2, 3]) // document 5
3、bind方法:
bind方法有两个作用:复制函数,并改变新函数中的this。
复制函数:
语法:函数.bind() // 返回新函数
function fn() {
console.log(this)
}
var newFn = fn.bind()
console.log(newFn)
console.log(fn)
console.log(newFn === fn) // false
改变新函数的this:
语法:函数.bind(新的this含义) // 返回的新函数中,this的含义会变成新的含义
function fn() {
console.log(this)
}
var newFn = fn.bind(document)
fn() // window
newFn() // document
ES6:
一、定义变量的关键字:
1、let关键字:
特点:
-
不允许重复声明
-
不存在预解析
-
在大括号中声明的变量只能在大括号中使用,如if、for的大括号中声明的变量
2、const关键字:
const关键字也是用来定义变量的,具备let的所有特性,
另外,1、const定义的变量的值不能修改。
2、定义必须赋值
3、let、const和var的区别:
1、不能预解析
2、不能重复定义
3、自带块级作用域
二、模板字符串:
使用反引号定义字符串 ` `
1、可以多行定义一个字符串,并在控制台中以多行形式输出
2、模板字符串中可以识别变量,使用美元符大括号:${变量}
二、对象简写:
1、当对象的键和值所使用的变量名同名,就可以简写
var name = '张三'
var age = 12
//简写:
var obj = {
name,
age
}
//等同于
var obj = {
name: name,
age: age
}
2、当对象的键对应的值是匿名函数,就可以简写:
var obj = {
eat() {}
}
等同于
var obj = {
eat: function() {}
}
三、箭头函数: () => {}
对匿名函数简写
let fn = function(){
console.log(111);
}
//使用箭头函数简写
let fn = ()=>{console.log(111);}
1、当只有一个形参的时候,可以省略小括号:
let fn = function(a){
console.log(a);
}
//使用箭头函数简写
let fn = a = > {console.log(a);}
2、大括号中只有一行代码的时候,可以省略大括号,如果这行代码中有return,必须省略return
let fn = function(a){
return a + 1;
}
//使用箭头函数简写
let fn = a = > a+1;
四、解构赋值:
快速的批量的定义变量,并拥有对象或数组中的值
1、var {键1, 键2} = 对象
定义了两个变量,变量名分别是键1,键2,值是对象中这两个键对应的值
2、var {键1: 新的变量名} = 对象
定义了一个变量,变量名是新的变量名,值是键1在对象中对应的值
3、var {键1: {键2}} = 对象
定义了变量,变量名是键2,值是对象.键1中 键2对应的值
4、var [变量名] = 数组
定义变量,值是数组的第一个元素
5、var [[变量名]] = 数组
定义变量,值是数组中第一个数组中的第一个值
五、展开合并运算符
语法:...数组名
1、当他作为实参的时候,是将一个数组,展开成多个值
2、将一个对象展开成多个键值对
3、当他当做形参的时候,是将多个实参收集成一个数组