gpt4 book ai didi

JavaScript 函数长度和参数属性/字段

转载 作者:行者123 更新时间:2023-12-03 09:01:20 25 4
gpt4 key购买 nike

尽管我有多年的 Java 经验,但我还是 js 的新手

我想当我声明一个函数时,它本质上是一种特殊类型的对象,并且有一些可以直接访问的内置字段,例如“参数”和“长度”

我注意到我可以在函数范围内访问诸如“参数”之类的内容即

function add(a,b) {
return arguments[0]+arguments[1]
}

我还可以访问范围之外的“长度”之类的内容

//2
alert(add.length)

上面的代码片段应该是正确的使用方式

但是

function sum(a,b) {
// error
return length
}

// null
alert(sum.arguments)

我认为参数和长度的基本原理不同,这是正确的想法吗?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~

经过一番研究,我找到了造成困惑的根本原因。问题围绕 JavaScript 中的属性 VS 变量

属性属于对象,变量属于上下文。这两个想法有时可以互换:全局上下文恰好是 window

<script>
//property
window.foo="a"
//variable
var bar="b"
//a
alert(foo)
//b
alert(bar)
</script>

在大多数情况下,例如函数上下文,它们是完全不同的想法,部分原因是您永远无法在代码中访问函数对象。因此,与全局设置相反,分配属性是不可能的!可能的只是在范围内声明一个变量

在我的问题中 “参数”是一个变量 而“长度”是一个属性我没能区分这两者

更多信息请参阅 this post

最佳答案

函数是 JavaScript 中的对象。正确的、真实的物体。

长度

函数的 length 属性是它所声明的参数的数量(这也称为函数的“arity”)。 add 的元数(length)为 2,因为您为其声明了两个形式参数:ab

参数

arguments 伪数组不是函数对象的一部分。它是在调用函数时创建的对象,并且仅在该函数调用上下文的范围内。它包含函数调用时实际使用的所有参数,这些参数可能与其声明的参数数量不同。对函数的每个单独调用都会获得自己单独的arguments 对象。

在 JavaScript 的“松散模式”(2009 年 ECMAScript 第 5 版规范之前的唯一模式)中,arguments 伪数组和声明的参数之间存在实时连接:

// In loose mode only
function foo(a) {
console.log("a = " + a);
console.log("arguments[0] = " + arguments[0]);
a = 42;
console.log("a = " + a);
console.log("arguments[0] = " + arguments[0]);
}
foo(67);

在松散模式下,输出:

a = 67arguments[0] = 67a = 42arguments[0] = 42

在“严格”模式(这是首选使用模式)下,该链接不存在(我们会在末尾看到 arguments[0] = 67),这很有用用于 JavaScript 引擎以进行优化。

关于JavaScript 函数长度和参数属性/字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296106/

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