最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • js函数参数作用域问题

    正文概述 掘金(isisxu)   2020-12-08   521

    普通函数

    // 示例代码:
    let obj2 = {
      sub (oo) {
        oo.fun()
        console.log('oo.uid', oo.uid);
      }
    }
    
    let obj1 = {
      add () {
        let uid = 10;
        let sid = 20
        obj2.sub({
          uid,
          fun () {
            console.log('this', this);
            console.log('sid', sid);
          }
        })
      },
    }
    obj1.add()
    

    js函数参数作用域问题


    箭头函数

    // 示例代码
    let obj2 = {
      sub (oo) {
        oo.fun()
        console.log('oo.uid', oo.uid);
      }
    }
    
    let obj1 = {
      a: 555,
      add () {
        let uid = 10;
        let sid = 20
        obj2.sub({
          uid,
          fun: () => {
            console.log('this', this);
            console.log('this.a', this.a);
            console.log('sid', sid);
          }
        })
      },
    }
    obj1.add()
    

    js函数参数作用域问题

    场景

    场景1

    var p = {
      age: 20,
      run: function () {
        let x = 10;
        setTimeout(function () {
          console.log('this', this);
          console.log('x', x);
        }, 1000);
      }
    }
    p.run()
    

    js函数参数作用域问题

    场景2

    // 示例1:
    var p = {
      tave: () => {
        setTimeout(() => {
          //this指向window
          //由于箭头函数不具有独立作用域,所以需要向上查找,发现还是一个箭头函数,箭头函数再上面没有其他函数作用域,所以是window作用域
          console.log(this);
        }, 1000);
      }
    }
    p.tave()
    

    场景3

    var p = {
      aa: 10,
      travel: function () {
        setTimeout(() => {
          //this指向p对象
          //由于箭头函数不具有独立作用域,所以需要向上查找,发现是一个匿名函数travel,匿名函数指向p对象
          console.log(this);
        }, 1000);
      },
    }
    p.travel()
    

    场景4

    // 示例1:
    var p = {
      aa: 20,
      //es6对象函数的简写:推荐使用的方式
      say () {
        console.log("say方法的this:", this); //指向p
        setTimeout(() => {
          console.log(this); //向上查找发现say函数的this指向p,所以箭头函数的this也指向p
        }, 1000);
      }
    }
    p.say()
    

    结论

    箭头函数:

    1. this查找: 箭头函数没有独立作用域,所以箭头函数内部this是箭头函数定义所在位置的外层函数决定的。
    2. 作用域查找:箭头函数没有独立作用域,所以箭头函数的上级作用域查找是看箭头函数定义所在位置的外层函数的作用域,如果外层函数还是箭头函数,则再外层一直到window
    

    普通函数:

    1. this查找: 谁调用函数,函数内部this就指向谁
    2. 作用域查找:当前作用域是本函数内部,上层作用域是函数定义位置的上层函数。
    

    起源地下载网 » js函数参数作用域问题

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元