一、高级函数
1、函数回调
函数回调的本质:在一个函数中,当满足一定的条件,回调函数会当作调用函数的参数传入
下面这个例子,faa作为回调函数,fbb作为调用函数。在JavaScript中内置的调用函数已经给我们写好了,我们只需写好fbb(回调函数)就好,就算你不写也不出错。
既然已经写到了函数的回调,那么再写一个面向对象的回调
上面这个例子,首先写一个对象,写好它的属性,方法。假如send方法就是内置的,早已经写好的方法,我们执行web.send(),虽然产生数据,但是最为程序员的我们并没有写处理这个数据的方法,所以我们为recved编写了一个处理数据方法,再去执行web.send(),这样产生的数据就能处理了。
再说,比如事件的绑定,我们为className为div的div标签绑定鼠标点击事件
在我们没有给div的点击事件写相应的函数时,程序并没报错,一旦为其添上方法,我们在触发该事件的话,那么我们写的方法会作为回调函数去执行。
2、函数的闭包
闭包目的:不允许提升变量作用域时,该函数的局部变量需要被其他函数使用
闭包本质:函数的嵌套,内层函数称为闭包
闭包的解决案例:①影响局部变量的生命周期,持久化局部变量 ②解决变量污染
//这就是闭包,一个函数想使用另一个函数局部变量function faa() { var date = [1,2,3,4]; function fbb() { console.log(date) } fbb();}faa();
//通过闭包,可以提升函数内部的局部变量function faa() { var data = '获取到的数据'; function fbb() { return data } fbb();}var a = faa();console
二、循环绑定
/*我们将为为li标签绑定点击事件的方法,写出一个闭包函数,外函数就是一个匿名函数的自调用。循环一次,先是匿名函数自调用一次,产生一个局部空间存放函数体代码,这样循坏5次,就产生了五个不同局部空间的 函数,当触发点击事件,就去执行相对应的回调函数,所引弹出的是它对应的索引值*/ //我们可以通过对象的属性去解决变量污染问题
//前面说了var定义的变量是无块级作用域的,我们可以通过ES6的语法,let去解决变量污染问题
let lis = document.querySelectorAll('li'); for (let i = 0 ; i < lis.length;i++) { lis[i].onclick = function () { alert(i); } }
三、面向对象Js
四、定时器
//setInterval(持续性定时器)//setInterval(函数, 毫秒数, 函数所需参数(可以省略));var timer = setInterval(function() {console.log("呵呵");}, 1000)//setTimeout(一次性定时器)//setTimeout(函数, 毫秒数, 函数所需参数(可以省略));setTimeout(function (data) {console.log(data);}, 1000, "数据"); //清除定时器 clearTimerout()|clearInterval()