急,反映一个关于本地变量遭篡改的BUG
发布于 6 年前 作者 gangzhong 9902 次浏览 来自 问答

本周六遇到一个小程序BUG,请查看!

现象:本地变量遭不明原因篡改。

微信开发者工具版本:1.02 1803210

IOS: 11.3

描述如下:

现有两个页面test01、test02。

test01视图层代码如下:

<view catchtap=“turntodtls”>

<view>{{A.code}}</view>

<view>{{A.data}}</view>

</view>

test01逻辑层代码如下:

const app = getApp()

Page({

data: {

A: null

},

turntodtls: function (e) {

app.globalData.D = this.data.A

console.log(this.data.A)

wx.navigateTo({

url: ‘…/test02/test02’

})

},

onLoad: function (options) {

this.setData ({

A: { code: “0”, data: “sinopec” }

})

},

})


test02视图层代码如下:

<view>

<view>

<input value="{{B.code}}" bindblur=“getvalue” id=“code”></input>

</view>

<view>

<input value="{{B.data}}" bindblur=“getvalue” id=“data”></input>

</view>

</view>

test02逻辑层代码如下:

var C = {}

const app = getApp()

Page({

data: {

B: null

},

getvalue: function (e) {

if (e.detail.value != “”) {

C[e.currentTarget.id] = e.detail.value

}

},

onLoad: function () {

C = {}

C = app.globalData.D

this.setData ({

B: C

})

},

})

两个页面拟通过全局变量D传递值。

App({

globalData: {

D: null,

},

首先点击test01,页面将以navigateTo方式转至test02,此时继续点击并修改test02中input的值(例如将“sinopec”改为“sino”),并失去焦点(目的是触发绑定函数getvalue),其后点击小程序左上角返回test01页面,并再次进入test02页面,发现页面显示“sino”(原本显示sinopec),打印test01页面中本地变量__A__后发现其值遭到篡改,如下如所示,原因不明。

微信开发者工具和真机调试均有此现象

7 回复

你好,代码片段如下,供您参考!@Special

wechatide://minicode/pgEMtnmW6QYU

现在人都喜欢abc来命名么

不然用什么举栗

懂了,真实尴尬

你在test01中将对象A赋值给了全局变量D;

然后又在test02中将全局对象赋值给了C;

又在getvalue中修改了C的值,其实是改的test01中A对象的值。全局D和test02其实都是指向的A对象。

题主可以去复习一下js的数据类型。

没人知道吗

回到顶部