关于this指向的一些问题

本文详细阐述了JavaScript中this的指向规则,包括全局作用域、普通函数、严格模式、箭头函数、私有作用域、构造函数及call/apply/bind的用法及其区别。通过实例解析,帮助理解如何灵活调整函数内部this的指向。
摘要由CSDN通过智能技术生成

关于this指向问题,如今自己学习归纳后总结出以下几个方面:

1,在全局作用域下,this指向window

  <script>
    console.log(this)  // 全局作用域下,this指向window
  </script>

 2,普通函数中,this指向全局window

  <script>
    function foo () {
      console.log(this) // window
    }
    foo()
  </script>

3,使用严格模式下,普通函数中的this指向未定义(undefined)

  <script>
    "use strict";
    function foo () {
      console.log(this) // undefined
    }
    foo()
  </script>

4, 如果是在全局里定义箭头函数,那函数里this指向的是window

  <script>
    const foo = () => {
      console.log(this) // window
    }
    foo()
  </script>

5,私有作用域

私有作用域里面的 this 不看函数在哪儿定义 只看函数怎么调用 
 a.如果是函数名() 直接调用 this =>  window 
 b.如果 是 **.函数名() 调用 this => .前面的那个东西
 c.如果是事件处理函数  this => 事件源

  <script>
        var obj = {
            name:'小李',
            fn:function(){
                console.log(this) // 指向obj对象
            }
        }

        obj.fn()

        var obj = {
            fun:function(){
                console.log(this)
            }
        }

        var a = obj.fun
        a()   // window
        
        obj.fun()  // obj对象
  </script>

6, 在构造函数中,this指向实例对象

## 改变this指向的三种方式call,apply,bind

改变this指向通常会call , apply , bind 三种方式,现在归纳总结以下这三种的用法以及他们之间的区别。

Ⅰ  call()

第一个参数就是this的指向

除了第一个参数之外,有n个参数

会立即调用函数

例: fn.call(obj,123,321,123456)

Ⅱ  apply()

第一个参数也是this指向

第二个参数,是一个数组形式,数组里的每一项分别给函数传参

会立即调用函数

例:  fn.apply(obj,[123,456,789])

Ⅲ  bind 

第一个参数是this指向

不会立即调用函数,会返回一个已经改变this指向的新函数

语法和call一模一样,区别在于立即执行还是等待执行,bind不兼容IE6~8

三者的相同点: 都能改变this的指向。

三者之间的区别:

① call 和 apply是会立即执行函数,而bind不会立即执行函数

② call 和 apply 在传参上的区别:call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值