-
本文是学习笔记,但是因为太过杂乱所以起了个综合性的名字,预知到未来查知识点的时候会头大如斗,但本着一切皆无所谓的态度,先记下再整理。(本章内容主要是函数)
-
JS 中有
...这样的操作符,在数组中的话,叫 展开(spread)操作符;在函数中的话叫做 剩余(rest)操作符。作用略有不同,但总的来说,与省略号的抽象意义差不多一样。// 展开操作符 const array1 = [1,2,3] const array2 = [...array1,4] console.log(array2) // 输出:[1,2,3,4] // 剩余操作符 function sum(...args){ let total = 0 for(let arg of args){ total += arg } return total } console.log(sum(1,2,3,4,5)) // 输出:15 重点是每一个实参都会参与从上面的例子来看,展开操作符很好理解,就是把数组展开而已,这个操作符可以放在任何地方,开头、中间、最后都行;
剩余操作符的话是一个数组,实参将会传到数组中。可以想一下反例,如果不使用,那么传入参数的数量如果大于形参的话,就不会发生任何事情,而使用这个操作符,就可以使每一个实参都有作用。注意,这个操作符只能用在形参的最后一位。
-
this 的指向。在方法中,它的指向是该对象;在函数中,它的指向是全局、window对象;在构造函数中,它的指向是通过 new 操作符创建的新的空对象上。
注意,当对象中的方法使用了回调函数,那么回调函数中的this指向就不是当前对象了,而是window 。
const example = { name:'张三', tags:['大众名','法外狂徒'], show(){ this.tags.forEach(funcion(tag){ console.log(this.name,tag) },this) } } 如果不给 forEach 传第二个参数(this绑定)的话, 是无法在回调函数中打印出 this.name 的,因为此时 this 指向是 window , 当传入第二个参数,绑定了 this 指向,就可以在回调函数中调用当前对象的属性了;注意第二个参数并不在回调函数中,它属于方法 show()。
-
接着上面的讨论,如果回调函数中并没有关于绑定 this 指向的参数,应该如何绑定 this 呢?很常见的一种做法是在 show() 方法中先声明一个变量指定 this ,
const self = this,然后在需要绑定 this 的地方使用变量 self ,比如 self.name 。同样,如果上面例子中的回调函数中使用箭头函数的话,那么就不用在意 this 绑定的事情了,因为箭头函数它自身没有 this 指向,它会从它的容器函数中继承 this 。
-
改变指向的三种方法。JS 内置了三种方法,分别是 .call() 、.apply() 和 .bind() 。
-
f.call('第一个参数是 this 指向','后面的参数是传参')
-
f.apply('第一个参数是 this 指向',['后面的参数是传参,要用数组形式'])
-
f.bind('第一个参数是 this 指向') 注意, bind 方法会返回一个函数,所以需要用函数的方法去调用它 比如
f.bind('this指向')();
-