js函数
函数:
首先函数是什么:可以这样说,JavaScript中函数就是包括在花括号中的代码快,前面使用了function关键字,当调用该函数时会执行里面的代码块
,可以在某些事件发生时直接调用该函数。大致就是这意思吧。在极客时间中作者把函数进行了一些分类,大致分为八种:
1.普通函数,就是直接使用function关键字定义的函数。例:
```function a(){
//code
}
```
2.箭头函数,ES6中新增的函数。例:
```let a = () =>{
//code
}
箭头函数看上去像普通函数的简写,实际上有个明显的区别就是箭头函数的this由所在环境决定,普通的函数就是谁调用就指向谁,没有调用就指向window
```
3.在class中定义的函数。例:
```class O{
a(){
//code
}
}
```
4.生成器函数。不常用比较少见。例:
```function* a(){
console.log(1);
yield; //暂停
cosole.log(2); //调用next方法可继续执行
}
var iter = a();
iter.next();
函数生成器特点时函数名前面有一个*。通过调用函数生成一个控制器。
通过调用next()方法开始执行函数。遇到yield函数将暂停。再次执行调用next()方法。
```
5.用class定义的类,实际上也是函数。例:
```class a(){
constructor(){
//code
}
}
```
第六第七第八种异步函数,就是普通函数,箭头函数,生成器函数前面加上async关键字。例:
```async function a(){
//code
}
let a = async () =>{
//code
}
async function a*(){
//code
}
```
this是什么:
函数在执行时会在函数内部自动生成一个this指针,谁直接调用产生这个this指针,this就指向谁。
正常情况下没有调用时指向window。还有一些方法可以更改this的指向,常见的有三种,分别是bind(),
call(),apply()三种。它们的主要区别是call和apply会调用函数,并且改变函数内部的this指向,call
和apply传递的参数不一样,apply必须是数组形式。bind不会调用函数就可以改变this的指向了。