gpt4 book ai didi

javascript - 函数参数是不可变的

转载 作者:行者123 更新时间:2023-11-30 00:21:53 38 4
gpt4 key购买 nike

对于每个函数,都有一个arguments 属性。当我想设置它时,它不取值。我很好奇,arguments 属性如何在内部实现以允许这种我无法修改的行为?我想要实现的是实现一个无法在我的对象中修改的属性,有人可以告诉我如何实现它。

  var a=function b(){

};
a.arguments="hello";
console.log(a.arguments); //still null

最佳答案

您想查看Object.freeze()Object.seal()

来自 mozilla.org 的例子

obj1 = {
internal: {}
};

Object.freeze(obj1);
obj1.internal.a = 'aValue';

obj1.internal.a // 'aValue'

// To make obj fully immutable, freeze each object in obj.
// To do so, we use this function.
function deepFreeze(obj) {

// Retrieve the property names defined on obj
var propNames = Object.getOwnPropertyNames(obj);

// Freeze properties before freezing self
propNames.forEach(function(name) {
var prop = obj[name];

// Freeze prop if it is an object
if (typeof prop == 'object' && !Object.isFrozen(prop))
deepFreeze(prop);
});

// Freeze self
return Object.freeze(obj);
}

obj2 = {
internal: {}
};

deepFreeze(obj2);
obj2.internal.a = 'anotherValue';
obj2.internal.a; // undefined

arguments 可以像任何其他变量一样在函数内部修改,因此它不像您想象的那样受到保护。在函数内部设置变量将无法像参数那样在函数外部访问。我明白你想要做什么 Object.freeze()Object.seal()您可能会感兴趣。

*

这个问题不是专门针对函数范围内的arguments。如果您已就此到达此页面,请参阅下文

*

arguments 参数是保留的,用于为您提供传递给函数本身的参数。

考虑以下代码::

设置函数以将参数记录到控制台:

function test() {
console.log(arguments);
}

带参数调用测试:

test('test');

返回:

test

arguments 现在是测试函数原型(prototype)的一部分,不能更改,除非通过使用参数调用函数来设置它们。

更清楚。您不能在 Javascript 中为参数添加默认值。正如我想象的那样,这可能是您想要完成的。

关于javascript - 函数参数是不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32814908/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com