var test=(function(){
var _v='a';
function changeV(){
_v='b';
};
function getV(){
return _v;
}
return {
v:_v,
changeV:changeV,
getV:getV,
}
})()
test.v//'a'
test.getV()//'a'
test.changeV()
test.v//'a'
test.getV()//'b'
test.changeV()发生了什么,大神 来讲讲 (¬_¬)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
v:_v,这里是对return 的对象进行了一个属性的赋值,赋的是一个字符串,这时候不是对象,直接copy的值。changeV和getV是闭包,操作的是
_v这个变量。string和number类型的数据只是在使用的时候被转化成对象,操作完成在内存中存的是其valueOf后的值。
var test=(function(){
})()
test.v //输出公有属性
test.changeV() 公有方法更改私有变量
这其实是一个闭包的问题,changeV这个方法改变的是匿名函数作用域中的_v变量。可以将_v理解为是一个私有变量,只能通过changeV方法修改,通过getV方法获取。
请问b是多少?
然而b仍然为'A',给你补一下
变量 _v 是基本数据类型,所以赋值给 test.v 后,test.v 也是基本数据类型。因此不管怎么改变 _v ,test.v 都是不会变的,半毛钱关系没有。