收藏
回答

同一page页面重复打开时,页面js里声明的变量会互相污染?

如下面代码片段中的that变量,在上面的页面关闭后,下面页面中that的指向变成了关闭了的页面.

这算是小程序的bug?还是就是目前这种规则?如果是已知规则,那官方是否需要改进一下?

https://developers.weixin.qq.com/s/mqa4fHme7ZnX

最后一次编辑于  2021-01-28
回答关注问题邀请回答
收藏

4 个回答

  • 布之道
    布之道
    2021-01-28

    我认为小程序的设计是,跳转到新的页面时,仅仅是会把Page()压入栈中,但是Page()之外的部分是不会重新声明.

    const app = getApp()
    let that;
    let count = 1function test(){
      count++;
      console.log(count)
    }
    test();
    Page({
      data: {
        btntext:'setData测试',
      },
      test:function(){
        that.setData({btntext:'setData成功!'})
      },
      onLoad() {
        that = this;
      },
      onShow(){
        this.setData({nodeid:that.__wxExparserNodeId__,btntext:'setData测试'})
      }
    })
    

    这是我测试的一段代码,在初次渲染之后,count的输出值是会被累加的.(意味着外部的代码有被运行到)但是之后无论跳转到什么页面,这个count的值就不会继续累加了.由此可得除了第一次渲染会初始化Page()外部的变量,之后的跳转就都不会再次声明这个变量了.

    2021-01-28
    有用 1
    回复 2
    • 布之道
      布之道
      2021-01-28
      如果你要用的话,应该是要把that的声明放到要用到的方法的外部,并且重新赋值。以防指向错误的页面实例。
      2021-01-28
      回复
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-29
      实际情况确实是这样.
      2021-01-29
      回复
  • brave
    brave
    2021-01-28

    看不太懂你要表达什么意思,或者你要做什么东西?

    2021-01-28
    有用 1
    回复 2
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-28
      that指向this,js里就不用考虑this这个关键字在使用时的局限性.
      2021-01-28
      回复
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-28
      在用this的地方,统一改用that即可
      2021-01-28
      回复
  • 面条君
    面条君
    2021-01-28

    你这代码里就只有一个页面。。。跳来跳去还是那个

    2021-01-28
    有用
    回复 2
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-28
      实际应用中,很多这种应用场景.比如商城中的商品详情页面,或搜索页面.会被多次重复打开.
      2021-01-28
      回复
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-28
      比如A商品页面里有个B商品链接,显示商品都用同一个page,在不关闭A商品页面的情况下,同时打开B商品页面.
      2021-01-28
      回复
  • 拾忆
    拾忆
    2021-01-28

    一个页面的进10次栈 AppData 面板数据 都是一套 最新的

    2021-01-28
    有用
    回复 1
    • 治辰科技于鲁宁
      治辰科技于鲁宁
      2021-01-28
      实际是每个栈中的变量是不冲突的.比如说页面data里的自定义变量等.否则不乱套了?!
      2021-01-28
      回复
登录 后发表内容
问题标签