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

标签 javascript

尽管我有多年的 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 = 67
arguments[0] = 67
a = 42
arguments[0] = 42

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

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

相关文章:

javascript - javascript 客户端中的服务器端数据绑定(bind)

javascript - 通过 jQuery 加载图像

javascript - 如何垂直对齐 HTML 文档的 body 标签?

javascript - 绘制大量线条时的 HTML Canvas 性能

javascript - 在 iOS/Android 上运行的 Node.js 服务器

javascript - 将 DIV 和 SVG 图层展平为单个图像

javascript - Ember 如何从 Controller 上的 html5 视频标签捕获 Action 'ended'?

javascript - 过渡到页面上的 anchor

javascript - 在选择更改时编写 javascript 隐藏/显示 div 的更好方法

javascript - 以选择器 ^= 开头的 css 在使用 javascript 更改类后不起作用