一、this的指向
1.普通函数 :function fn(){}
fn();
this指向window
2.对象的方法 :var o ={ sayhai:function(){}}
o.sathai;
this指向对象o
3.构造函数 :function Start(){}
new Star();
this指向实例对象
4.绑定事件 btn.onclick = function(){}
点击调用
this指向绑定按钮
5.定时器:setinterval(function(){},1000)
每个1秒调用一次
this指向window
6.立即执行:(function(){})()
this指向window
二、call、apply、bind
1.call
1.调用函数
2.可以改变this指向 fn.call(o) 这时候this指向o
3.call可以实现继承 ,其实就是修改this的指向
2.apply
1.也是调用函数,也是可以改变函数内部的this指向
2.可以传递数组或者是伪数组
3.主要应用 :利用apply借助math内置对象对对象求最大值
3.bind
1.不会调用函数
2.可以改变内部的this值
3.返回的是改变this的新函数
4.应用于因为不会立即执行但是有想改变this,就选择bind
总结
call和apply最大区别 传递参数不同
bind和其他两个不同点是不会调用函数
call常用:继承
apply常用:和数组有关
bind常用:不调用函数,还行改变this 常用与setinterval定时器
三、闭包 (closure)
含义: 一个作用域有权访问另一个函数作用域中的变量的一个函数
简单的说就是一个作用域有权访问另外一个函数内部的局部变量
闭包一般就是返回一个高级函数 立即执行函数有时候可以看成闭包
//lis[i]里面使用的i是外面传进来的 使用了闭包
for( var i =0; i <lis.length ; i++){
(function(i){
setInterval(() => {
console.log(lis[i].innerHTML);
}, 3000);
})(i)
}
function fn(){
var num = 10;
function fun(){
console.log(num);
}
// fun可以访问fn的num 产生了闭包 */
return fun;
}
闭包的主要作用优点:延伸了变量的作用范围
闭包的缺点:局部变量一直存在,只有调用了才释放,造成内存泄漏;
五、递归
含义:一个函数在内部可以调用其本身,简单来说就是函数内自己调用自己,这个函数就叫递归函数
递归函数作用和循环效果一样
由于递归很容易案发时栈溢出错误,所以必须加退出条件return
var num = 0;
function fn(){
console.log('我要打印6句话');
if(num ==6){
return;
}
num++;
fn();
}
fn();
使用递归求阶乘
function fn(n){
if (n ==1){
return 1;
}
return n*(n-1);
}
console.log(fn(10));