js中的变量,如果和页面更新相关,我们会在data里定义。但是为了代码结构化和划区块,和页面不相关的变量我们喜欢定义在最外层。
但是页面unload后最外层的变量不会初始化,感觉这样是很不合理的。
比如上拉加载的参数(let page = 1;)在进入页面时初始值是1。当回退页面后unload触发,重新进入时data里的参数page会初始化为1,但是最外层的page不会初始化。具体请在代码片段里查看网络请求的参数
这样我们只能在onUnload钩子里出初始化相关参数,这很蛋疼啊。 微信大大们看下这问题,能不能unload时把最外层变量初始化
页面js文件只会在小程序启动时执行一次,并不是每次构造页面都会执行一次。
Page这个函数只是注册页面,你可以理解为Page函数定义了一个类,每次加载这一页都是用这个类new了一个对象。
只有tabBar中定义的页面是在离开后不会被销毁的,其他页面从路由栈中移除就销毁了。
销毁的是页面实例,而不是页面js文件的执行上下文,你每一个页面实例读取的都是这个执行上下文中的page变量,当然不会有变化。
所以不存在什么初始化、缓存这回事。
与视图层不相关的数据你可以放在当前页面实例中,即this中,如this._page=10,只要不覆盖原有的属性你想放什么都行,这样数据自然会和页面一起销毁,多个页面实例间也不互相干扰。
你想存页面实例间共享的数据,倒是可以放在最外层。