var let const
var定义的变量,会进行变量提升
let和const相同点:没有变量提升,是一个块级作用域,不会污染全局变量,不能重复声明
不同点:const一般用来声明常量
模板字符串
它是用的是tab键上面的反引号,在插入变量的时候使用${变量名}
apply和call和bind
这三个能挟持另外一个对象的方法,继承另外一个对象的属性
var name = ''
var xw = {
name:'小王',
say(){
console.log( this.name )
}
}
var xh={
name:'小红'
}
//call和apply都是对函数的直接调用
xw.say.call(xh)
xw.say.apply(xh)
//这样xh可以挟制到xw里面发say方法啦。可以打印出小红的名字啦
//bind方法返回的依然是一个函数,后面还需要用()来调用才行
//xw.say.bind(xh) 这样写是没有任何结果的
xw.say.bind(xh)() //这样也能挟持到xw中的方法啦
相同点:
- 在JS中,这三者都是用来改变this指向的
- 第一个参数都是this要指向的对象
- 都可以利用后续参数传参
不同点:
如果say方法有传递了参数,这时候如果通过call和apply和bind方法进行传参的时候,他们的写法不同。写法如下:
var name = ''
var xw = {
name:'小王',
say(a,b){
console.log( this.name,a+b )
}
}
var xh={
name:'小红'
}
xw.say.call(xh,1,2)
xw.say.apply(xh,[1,2])
xw.say.bind(xh,1,2)()
xw.say.bind(xh)(1,2)
总结:
- 都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply方法需要以数组的形式传入。
- call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍。
- 改变this对象的指向问题不仅有call,apply,bind方法,也可以使用that变量来固定this的指向。
剩余参数…keys
- 剩余参数由...和一个紧跟着的具名参数指定,比如...keys&