本周六遇到一个小程序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后发现其值遭到篡改,如下如所示,原因不明。
微信开发者工具和真机调试均有此现象
共享代码片段如下:
wechatide://minicode/pgEMtnmW6QYU
我仔细看过了,步骤: D = A
C = D
那显然 A C D都是引用同一个对象,改了C的数据,A当然也改了
js基础还是要有的,不然自己被自己坑,有种变量叫引用类型
懂了,真实尴尬...
本地变量A,不是全局变量D,请仔细看
本地变量A除了在本页面onload中被赋值以外,其他地方均没有被赋值语句,但是最后其值却因莫名其妙的原因篡改了
是的
我打印的可是本地变量A,与全局变量无关
???
全局变量修改了一个后面的全部会被修改