javascript面试题
ringa_lee
ringa_lee 2017-04-11 11:21:26
[JavaScript讨论组]
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()发生了什么,
大神 来讲讲 (¬_¬)

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
怪我咯

v:_v, 这里是对return 的对象进行了一个属性的赋值,赋的是一个字符串,这时候不是对象,直接copy的值。

changeV和getV是闭包,操作的是_v这个变量。

string和number类型的数据只是在使用的时候被转化成对象,操作完成在内存中存的是其valueOf后的值。

阿神

var test=(function(){

var _v='a';  //私有变量

function changeV(){    //私有函数
    _v='b';
};
function getV(){
    return _v;
}
return {
    v:_v,              //公有属性
    changeV:changeV,   //公有方法
    getV:getV,         //公有方法
}

})()

test.v //输出公有属性
test.changeV() 公有方法更改私有变量

PHP中文网

这其实是一个闭包的问题,changeV这个方法改变的是匿名函数作用域中的_v变量。可以将_v理解为是一个私有变量,只能通过changeV方法修改,通过getV方法获取。

PHP中文网
var a = 'A',
    b = 'B';

b = a;
a = 'C';

请问b是多少?


然而b仍然为'A',给你补一下

JavaScript中的变量有5个基本数据类型(Undefined, Null, Boolean, Number,String)和引用数据类型(Object,Function,Array等)。
二者的区别主要在于对变量内容保存的方式,基本类型的变量中存储的就是简单的数据段,而引用类型变量存储的是指向对象的引用

变量 _v 是基本数据类型,所以赋值给 test.v 后,test.v 也是基本数据类型。因此不管怎么改变 _v ,test.v 都是不会变的,半毛钱关系没有。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号