js中this指向问题?

This是一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

this 是在函数被调用时确定的,它的指向完全取决于函数调用的地方,而不是它被声明的地方(除箭头函数外)。当一个函数被调用时,会创建一个执行上下文,它包含函数在哪里被调用(调用栈)、函数的调用方式、传入的参数等信息,this 就是这个记录的一个属性,它会在函数执行的过程中被用到。

(this要在执行时确认值,定义时无法确认,this永远指向一个对象,this的指向完全取决于函数调用的位置。)

(1)作为纯函数调用this======》指window

(2)对象方法调用this======》指该方法所属对象

(3)构造函数调用this=======》实例对象

(4)事件绑定方法调用this=======》绑定事件对象

(5)定时器函数调用this=========》window

(6)立即执行函数调用this==========》window

(7)改变函数内部this指向======》cal(),apply(),bind()


一:改变this三种方式

(1)call方法:调用一个对象。

       call(thisScope,arg1,arg2.......)  

(2)apply方法:调用一个函数

        apply(thisScope,[arg1,arg2,arg3........])

(3)bind方法:不会调用函数,改变函数内部this指向,返回的是原函数改变this之后产生的新函数。

应用:如果只是想改变this指向,并且不想调用这个函数的时候,可以使用bind。

fn.bind(thisScope,arg1,arg2........)

fn是bind返回的新函数

(4)call,apply,bind三者异同

共同点:都可以改变this指向

不同点:

                all 和 apply 会调用函数, 并且改变函数内部this指向.

                call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递

                  bind  不会调用函数, 可以改变函数内部this指向.

应用场景:

                call 经常做继承.

                 apply经常跟数组有关系.  比如借助于数学对象实现数组最大值最小值

                   bind  不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.

二:严格模式下this指向

你可能感兴趣的:(js中this指向问题?)