收藏
回答

为什么我定义的这个变量在this.setData里使用?


最后一次编辑于  09-19
回答关注问题邀请回答
收藏

8 个回答

  • 啊喵
    啊喵
    09-19

    这边有个浅见,你这个问题本来就不成立,上面读取文件回调里定义的myViews,本来就不能在外面使用,你下面setData肯定报错,是不能使用的。因为var是在当前作用域下声明一个变量,即使用了箭头函数,改变的只是执行上下文,也就是this的指向。如果是一般网页中,试下不在函数体内声明,直接myViews = XXX,会变成全局变量,外面也能用,而且和是否箭头函数无关,你可以试试。但是在小程序内,变量不声明是不被允许的,一下就报错了。记住函数体内声明的变量只在函数体内使用。

    然后你使用了箭头函数,this指向了当前上下文,你这里应该是当前页面实例,回调里赋值应该为this.myviews,外面setData也使用this.myviews。

    当然这个也是会错的,上面那个是异步的回调,下面当然就拿不到。。所以,你为什么不直接在回调里setData呢?

    09-19
    赞同 1
    回复 1
    • 乘风破浪
      乘风破浪
      09-19
      谢谢啦,我明白了
      09-19
      回复
  • Yunior
    Yunior
    09-19

    楼主可以查查箭头函数的作用域问题,可以理解为箭头函数的作用域和this.setData是相同的,个人猜测,可以深究一下。

    09-19
    赞同 1
    回复
  • Mr.马
    Mr.马
    09-19

    作用域问题

    09-19
    赞同 1
    回复 1
    • 乘风破浪
      乘风破浪
      09-19
      应该把函数里的变量定义成全局变量是不,
      09-19
      回复
  • Populus alba
    Populus alba
    09-19

    把变量定义放到 文件最上面

    09-19
    赞同
    回复
  • 微盟
    微盟
    09-19

    this.myViews = res.data

    09-19
    赞同
    回复 4
    • 乘风破浪
      乘风破浪
      09-19
      这样不对,还是报错
      09-19
      回复
    • 微盟
      微盟
      09-19回复乘风破浪
      错误贴出来看看
      09-19
      回复
    • 乘风破浪
      乘风破浪
      09-19回复微盟


      09-19
      回复
    • 微盟
      微盟
      09-19回复乘风破浪
      你setData那里也得用this.myViews,同时,你调用的这个是异步的,要么用readFileSync,要么调整下setData的位置
      09-19
      回复
  • 鹏君
    鹏君
    09-19

    应该是箭头函数的作用域和this.setData的作用域相同

    09-19
    赞同
    回复 1
    • 乘风破浪
      乘风破浪
      09-19
      那该怎么改呀,我实在是弄不懂了
      09-19
      回复
  • L°
    09-19

    它是个私有变量

    09-19
    赞同
    回复
  • 卢霄霄
    卢霄霄
    09-19

    请百度 js 作用域

    09-19
    赞同
    回复
问题标签