1.如何确定this的值:
js脚本的执行分为严格模式和非严格模式,不同的模式下,this的值有可能也是不一样的。在非严格模式下,this的值总是指向一个对象;在严格模式下,this的值可以指向任意值。
判定this的值,分为以下两种情况
1.全局执行环境中,指向全局对象(严格模式,非严格模式)
2.函数内部,取决于函数被调用的方式
2.1 直接调用时,在严格模式下,值为undefined
非严格模式下,值为window
2.2 通过对象方法调用时,在严格模式和非严格模式下,this的值都指向调用的对象
非严格模式下:
严格模式下 :
2.如何指定this的值
如何改变this的值?改变this的值,可以分为两种方式,分别是在函数调用时改变在函数创建是改变。
2.1 函数调用时改变this的值:
2.1.1 使用call方法改变this
2.1.2 使用apply方法改变
注:call方法的入参依次传入,apply方法的入参通过数组的方式传入
2.2 函数创建是改变this的值:
2.2.1 通过bind方式改变this的值
注:通过bind改变this后,函数不会立即执行,而是会生成一个新的函数,需要手动执行新的函数
2.2.2 通过箭头函数改变this
箭头函数中没有this,其this是指向对应的上下文中的this值。
下一章,将讲解一下如何手写call,apply,bind方法,带着大家熟悉一下该方法下的底层原理