这道面试题本质上是考验js基本功是否扎实,分别考察了js的作用域,实例,复杂数据类型的理解和运用。
先说结果: 函数返回一个新的对象,每个对象之间初始值相同,但互不影响。 而单独一个对象,会有多个变量指针指向同一个对象问题。
只要能把结果说出来,面试官也就清楚你的js基本功不错啦。 想了解细节看下面代码哦,应该瞬间就明白了。如果还是疑惑可以再问哈。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let data = {
c:3,
d:4
}
window.data = data;
window.data.c = 'datac'
window.data2 = data;
window.data2.d = 'data2d'
console.log(window.data) // {c: 'datac', d: 'data2d'}
console.log(window.data2) // {c: 'datac', d: 'data2d'}
let state = ()=>{
return {
a:11,
b:22
}
}
window.state = state()
window.state.a = 'state'
window.state2 = state()
window.state2.b = 'getter'
console.log(window.state) // {a: 'state', b: 22}
console.log(window.state2) // {a: 11, b: 'getter'}
</script>
</body>
</html>
让我们再看看vue官方是怎么说的: 可以点进官网看一下,如果不是函数返回对象,每一个组件共用一个对象,你操作一个组件的时候所有的组件值都同步发生了变化。
地址v2.cn.vuejs.org/v2/guide/co…
也就是说呢,每一个组件都是一个vue实例,每一次执行函数都会返回一个全新的初始化对象,如此,避免了对象的数据污染。每一个实例中的数据都是相互不影响的。
如果你觉得我解释的有用,点个赞吧! 如果觉得哪里说的不对,接受指正!