this指向问题和闭包的理解

本文深入探讨了JavaScript中this关键字的指向规则及其在不同上下文中的行为变化,同时详细解析了闭包的概念和使用方式,通过实例展示了闭包如何保持对自由变量的引用。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    // this的指向
    function fn() {
      this.age = 22
      console.log(this)
    }
    // 如果直接调用fn函数,this是window
    fn() //打印  →  Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
    // 如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象
    let f1 = new fn() //打印  →  fn {age: 22}
    console.log(f1.age)

    //apply改变this的指向
    let obj = {
      age: 25
    }
    function fnn() {
      console.log(this)
    }
    fnn() //打印  →  Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
    fnn.apply(obj) //打印  →  {age: 25}

    // 闭包
    function fn1() {
      let str = '闭包'
      console.log('fn1 →', str)
      return function fn2() {
        console.log('fn2抛出闭包 →', str)
      }
    }
    // 调用方式1
    fn1()() //打印      fn1 → 闭包   fn2抛出闭包 → 闭包
    // 调用方式2
    let fn3 = fn1()
    fn3()
  </script>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值