javascript对象的属性不是引用传递的吗?
迷茫
迷茫 2017-04-10 16:00:19
[JavaScript讨论组]
window.reply=(function()
{
    var is_ready=false;
    function ready(callback)
    {
        is_ready=true;
        callback && callback();
    }
    return {
        is_ready:is_ready,
        ready:ready
    }
}());
if(reply.is_ready)
{
    test();
}
else
{
    reply.ready(test);
}
function test()
{
    console.log(reply.is_ready);
}

上面的打印结果是false,为何不是引用传递的呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
PHP中文网

基本类型传值 引用类型传reference.

黄舟

复制某个对象的某个变量是对象的引用。但为对象添加属性,操作的是实际对象。不是引用传递

PHP中文网

javascript中参数的传递都是按值传递的,只不过对于基本类型传递实际值,对于对象传递对象地址。
javascript一个属性的对应的"值"只计算一次,除非你对其重新赋值改变它。
对应到你的问题,也就是reply对象的is_ready的值和ready对应的函数对象在匿名函数执行完毕后就是确定的固定的,是不变化的-基本类型值固定,对象包括函数对象地址固定,除非你对is_ready和ready重新赋值
例如代码修改为:

window.reply=(function()
{
    var is_ready=false;
    var returnOBJ;
    function ready(callback)
    {
        is_ready=true;
        returnOBJ.is_ready= is_ready;
        callback && callback();
    }
    returnOBJ={
        is_ready:is_ready,
        ready:ready
    };
    return returnOBJ;
}());
if(reply.is_ready)
{
    test();
}
else
{
    reply.ready(test);
}
function test()
{
    console.log(reply.is_ready);
}

结果为true

也可以修改成这样

window.reply=(function()
{
    var is_ready=false;
    function ready(callback)
    {
        is_ready=true;
        callback && callback();
    }
    return {
        is_ready:function(){
            return is_ready;
        },
        ready:ready
    }
}());
if(reply.is_ready())
{
    test();
}
else
{
    reply.ready(test);
}
function test()
{
    console.log(reply.is_ready());
}

结果同样为true

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

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