本周六遇到一个小程序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后发现其值遭到篡改,如下如所示,原因不明。
微信开发者工具和真机调试均有此现象
麻烦给个相关的代码片段(https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/minicode.html),我们定位下问题
不然用什么举栗
现在人都喜欢abc来命名么
懂了,真实尴尬
你在test01中将对象A赋值给了全局变量D;
然后又在test02中将全局对象赋值给了C;
又在getvalue中修改了C的值,其实是改的test01中A对象的值。全局D和test02其实都是指向的A对象。
题主可以去复习一下js的数据类型。
你好,代码片段如下,供您参考!@Special
wechatide://minicode/pgEMtnmW6QYU
没人知道吗