我是靠谱客的博主 苹果芝麻,最近开发中收集的这篇文章主要介绍【快应用】快应用赋值时出现堆栈溢出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

现象描述

将通过 $element('id') 获取到内容,赋值给成员变量,引发堆栈溢出(RangeError: Maximum call stack size exceeded),从而导致程序的崩溃。页面成员变量stateText发生变化时,也引发堆栈溢出的报错。

错误示例代码如下:

<template>

<div id="content">

<input type="button" class="button" @click="onTestClick" value="会引发堆栈溢出"/>

<text>{{ stateText }}</text>

</div>

</template>

<script>

export default {

private: {

mContentNode: null,

stateText: 'init state'

},

onReady() {

/* 将 $element('id')获取的内容,赋值给成员变量,则可能引发堆栈溢出 */

this.mContentNode = this.$element('content')

},

onTestClick() {

/* 页面 DOM 存在成员变量的引用,当成员变量发生变化时,则必然引发堆栈溢出问题 */

this.stateText = 'new state'

}

}

</script>

问题分析

由于赋值属于VM属性,会触发大规模的数据驱动变化,导致内部出现异常循环,从而引发堆栈溢出的错误。

解决方法

请勿对成员变量进行赋值,如果需要赋值,可以赋值给局部变量或者页面的全局变量。

正确的示例代码如下:

<script>

let $gContentNode = null

export default {

private: {

stateText: 'init state'

},

onReady() {

/* 如将 $element('id')获取到内容,赋值给局部变量,或页面全局变量,则可规避堆栈溢出问题 */

const cContentNode = this.$element('content')

$gContentNode = this.$element('content')

},

onTestClick() {

this.stateText = 'new state'

}
}

</script>

 欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

最后

以上就是苹果芝麻为你收集整理的【快应用】快应用赋值时出现堆栈溢出的全部内容,希望文章能够帮你解决【快应用】快应用赋值时出现堆栈溢出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部