gpt4 book ai didi

javascript - arguments 对象支持哪些属性

转载 作者:搜寻专家 更新时间:2023-11-01 00:20:02 25 4
gpt4 key购买 nike

我在 NodeJS 的采访中被问到这个问题,

arguments 对象支持哪些属性。

a) caller
b) callee
c) length
d) All

当我用谷歌搜索时,我发现所有 3 properties存在于参数对象中。

但是如果我尝试使用示例程序对此进行测试,我会发现只有 Length 属性存在。

这是我的示例程序:

var events = 'HelloWorld'

abc(events);
function abc(args) {
console.log(args.charAt(1))
console.log(args.callee);
console.log(args.caller);
console.log(args.length);
}

这是输出:

e
undefined
undefined
10

所以根据上面的输出只有长度是有效的属性,但是根据上面的所有 3 个都是有效的属性。那么这个问题的正确答案是什么?

最佳答案

您的作用域变量 args 和局部变量 Function.arguments 是两个截然不同的东西。在您的函数 abc(args) 中,args 是作用域变量,它将是您传递给它的调用的任何内容。

但是,

arguments 是一个类似数组的局部变量,可在每个函数调用中访问,并与传递给函数的值相对应。例如:

function foo(args) {
console.log(args);
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}

foo("bar", "baz", 123, 456);

这将输出:

> "bar"
> "bar"
> "baz"
> 123

即使这个函数只有一个参数,args,局部变量arguments 仍然存在,它表示传递给 所有 个参数这个功能。这样我们仍然可以找到第二个、第三个和第四个参数的值,即使它们没有被声明为函数范围的一部分。

您遇到的问题是,您正试图在范围变量 args 中访问 Function.arguments 的属性,而这两者完全是不同的变量。如果您想访问这些属性,请改为引用 arguments:

var events = 'HelloWorld'
abc(events);

function abc(args) {
console.log(args.charAt(1));
console.log(arguments.callee);
// console.log(arguments.caller); //DEPRECATED
console.log(arguments.length);
}

关于javascript - arguments 对象支持哪些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259078/

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