前面两篇所讲的,基本型别是传值,物件型别是传址,但同时也存在例外,举下例,如果对 obj 赋予一个新的物件,那外面的变数会被改变吗?
var coin1 = { value: 10 };
function changValue(obj) {
obj = { value: 200 };
}
changValue(coin1);
console.log(coin1); // { value: 10 } 一样,没有被改变
而如果不是重新赋值的状况,而是修改属性:
var coin1 = { value: 10 };
function changValue(obj) {
obj.value = 200
}
changValue(coin1);
console.log(coin1); // { value: 200} 外面 coin1 的值被改变了
因为写了这个主题才发现,前面讲的传值 call by value、传址 call by reference,还有另外一种很多人偏向的 call by sharing(未有合适翻译),原来这是连 ECMAScript 都没有定义的概念,於是大家都是用其他程序语言的定义来推测 JavaScript 是属於哪一种形式。
因为无法证明 JavaScript 记忆体的运作方式,以及在不同执行引擎下会有不同结果,所以相关概念在未经证实的情况都仅能参考,而我觉得试着画记忆体图、流程图的部分,能帮助自己在实作上的理解。
JavaScript’s Memory Model
008天重新认识JavaScript
Call by Reference 还是 Call by Sharing
>>: JavaScript入门 Day26_while回圈
Q: 网路上已经很多可以用的随机选择器了耶... A: 拉霸的用途很多,看你怎麽用罗~ 已经连续N...
型别 型别指的是资料的型态,Python 内建的几个基本型态有: 数字 整数(Integer)-in...
这边为一道设计过的 Docker Debug 挑战题目,初始环境有所设置错误,请大家帮忙找出 Do...
我们学习前端语言就是为了跟浏览器沟通,让网页可以渲染出想要的效果,创造使用者互动的良好体验。所以要...
还记得我们在 Day 15 曾经介绍过 Guard 吗? 今天要来跟大家分享如何在 XState 中...