首页 > 其他 > 详细

this与闭包(函数进阶)

时间:2020-12-20 10:48:19      阅读:25      评论:0      收藏:0      [点我收藏+]

1.this

1.1 函数内 this 的指向

这些 this 的指向,是当我们调用函数的时候确定的。 调用方式的不同决定了this 的指向不同
一般指向我们的调用者
技术分享图片
1.2 改变函数内部 this 指向

JavaScript 为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部 this 的指向问题,常用的有 bind()、
call()、apply() 三种方法
(1)call 方法
call() 方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向。
fun.call(thisArg, arg1, arg2, ...)
? thisArg:在 fun 函数运行时指定的 this 值
? arg1,arg2:传递的其他参数
? 返回值就是函数的返回值,因为它就是调用函数
? 因此当我们想改变 this 指向,同时想调用这个函数的时候,可以使用 call,比如继承
技术分享图片


技术分享图片
(2)apply方法
pply() 方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的 this 指向。
fun.apply(thisArg, [argsArray])
? thisArg:在fun函数运行时指定的 this 值
? argsArray:传递的值,必须包含在数组里面
? 返回值就是函数的返回值,因为它就是调用函数
? 因此 apply 主要跟数组有关系,比如使用 Math.max() 求数组的最大值
技术分享图片


(3)bind方法
bind() 方法不会调用函数。但是能改变函数内部this 指向
语法:fun.bind(thisArg, arg1, arg2, ...)
? thisArg:在 fun 函数运行时指定的 this 值
? arg1,arg2:传递的其他参数
? 返回由指定的 this 值和初始化参数改造的原函数拷贝
? 因此当我们只是想改变 this 指向,并且不想调用这个函数的时候,可以使用 bind
技术分享图片

1.3 call apply bind 总结

相同点:
都可以改变函数内部的this指向.
区别点:

  1. call 和 apply 会调用函数, 并且改变函数内部this指向.
  2. call 和 apply 传递的参数不一样, call 传递参数 aru1, aru2..形式 apply 必须数组形式[arg]
  3. bind 不会调用函数, 可以改变函数内部this指向.
    主要应用场景:
  4. call 经常做继承.
  5. apply 经常跟数组有关系. 比如借助于数学对象实现数组最大值最小值
  6. bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.

2.闭包

2.1 变量作用域

变量根据作用域的不同分为两种:全局变量和局部变量。

  1. 函数内部可以使用全局变量。
  2. 函数外部不可以使用局部变量。
  3. 当函数执行完毕,本作用域内的局部变量会销毁

2.2 什么是闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。 ----- JavaScript 高级程序设计
简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。
function fn1(){ // fn1 就是闭包函数
var num = 10;
function fn2(){
console.log(num); // 10
}
fn2()
}
fn1();

2.3 闭包的作用

提问:我们怎么能在 fn() 函数外面访问 fn() 中的局部变量 num 呢 ?
技术分享图片
闭包作用:延伸变量的作用范围;
技术分享图片

2.4 闭包总结

  1. 闭包是什么?
    闭包是一个函数 (一个作用域可以访问另外一个函数的局部变量)
  2. 闭包的作用是什么?
    延伸变量的作用范围

this与闭包(函数进阶)

原文:https://www.cnblogs.com/zl-mdc/p/14162056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!