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的指向了。