小编use*_*693的帖子

JavaScript中的命名参数和参数对象

最近我开始通过Nicholas C. Zakas的书籍专业JavaScript开发人员学习JavaScript,我遇到了一些我自己无法解决的问题.

正如标题所说,这完全是关于JavaScript函数中的命名参数参数对象.

例如,我们有这段代码:

function doAdd(num1 , num2) {
     arguments[1] = 10;
     alert(arguments[0] + num2);
}

doAdd(10 , 20);
Run Code Online (Sandbox Code Playgroud)

书中说,参数对象中的值会自动反映在相应的命名参数中,因此num2输入值为20的函数然后它会被覆盖arguments[1],最后得到一个值10.所有这些都清楚到此为止.然后它说

这种效果只有一种方式:更改命名参数不会导致参数中相应值的更改.

这就是问题开始的地方.

我尝试修改这段代码以了解作者所说的但我失败了.

例如

function doAdd(num1 , num2) {
     arguments[1] = 10;
     num2 = 40;
     alert(arguments[0] + arguments[1]);
}

doAdd(10 , 20);
Run Code Online (Sandbox Code Playgroud)

此时num2进入函数具有值20再次,它改变到10通过arguments[1],然后它改变一次,以40经由命名参数num2这个时候.警报弹出50,因为对命名参数的更改不会导致更改相应的值arguments.为什么警报不会弹出20

javascript

9
推荐指数
1
解决办法
137
查看次数

多个对象属性JavaScript

在JavaScript中获得了这个代码片段,它将多个属性定义到一个对象中.

var book = {};

Object.defineProperties(book , {
    _year: {
        value: 2004
    },

    edition: {
        value: 1
    },

    year: {
        get: function() {
            return this._year;
        },

        set: function(newValue) {
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue - 2004;
            }
        }
    }
});

book.year = 2005;
alert(book.edition);
Run Code Online (Sandbox Code Playgroud)

因此,具有该代码的书声称alert(book.edition);将显示.2相反,它显示1.好像它永远不会执行访问者属性代码的一部分(year: get: set:).谁知道为什么会这样?

javascript

1
推荐指数
1
解决办法
62
查看次数

标签 统计

javascript ×2