在 data 属性外部定义的变量,到底是单个组件实例内部独享还是多个组件实例共享?

2023-05-19 09:11:59 +08:00
 xubingok
<script>
	let a = "";
	export default {
		data() {
			return {
				b: ""
			};
		},


	};
</script>

代码如上图所示.环境是 vue2.

因为一些性能和循环引用问题.想把某些变量放在 data 外面.但是这个组件本身在页面上是多实例的.

不知是实例内部独享还是多个实例共享呢?

个人理解:组件似乎在打包过程中变成闭包了?应该是每个实例各自隔离吧?

1604 次点击
所在节点    Vue.js
6 条回复
coyoteer
2023-05-19 09:23:38 +08:00
我试验了一下是共享的
wu67
2023-05-19 09:40:36 +08:00
闭包是值的跨作用域传递...
ChefIsAwesome
2023-05-19 09:58:02 +08:00
你那个 export 的玩意是工厂函数,拿来造组件实例的,不是实例本身啊。
daliusu
2023-05-19 13:41:30 +08:00
你这跟 vue 半毛钱关系没有把,你把一个对象放在 data 外边,data 是每次实例创建的时候调用一下 return 一个新的对象,但是这个对象内部一些属性引用的不还是你外边的对象吗?如果不想,你可以 deepclone 一下,或者把这个外部对象也改写成调用函数获取的形式,const getData = () => ({x:1})
xubingok
2023-05-22 11:07:32 +08:00
懂了!醍醐灌顶!感谢各位解惑!
xubingok
2023-05-22 14:42:13 +08:00
那如果不需要加入响应式,但又每个实例隔离的话,怎么写呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/941171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX