【发布时间】:2015-08-30 11:33:56
【问题描述】:
虽然我有多年的 Java 经验,但我是 js 新手
我想当我声明一个函数时,它本质上是一种特殊类型的对象,并且有一些可以直接访问的内置字段,例如“arguments”和“length”
我注意到我可以访问函数范围内的“参数”之类的东西 即
function add(a,b) {
return arguments[0]+arguments[1]
}
我也可以在范围之外访问诸如“长度”之类的东西
//2
alert(add.length)
上面的sn-p应该是正确的使用方式
然而
function sum(a,b) {
// error
return length
}
// null
alert(sum.arguments)
我认为参数和长度不是同一个基本的,是正确的想法吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~
经过一番研究,我找到了混乱的根本原因。 问题围绕着 JavaScript 中的属性 VS 变量
属性属于对象,而变量属于上下文。 这两个想法有时可以互换: 全局上下文恰好是窗口
<script>
//property
window.foo="a"
//variable
var bar="b"
//a
alert(foo)
//b
alert(bar)
</script>
在大多数情况下,比如函数上下文,它们是完全不同的想法,部分原因是您永远无法在代码中访问函数对象。因此,与全局设置相反,分配属性是不可能的!可能的只是在范围内声明一个变量
在我的问题中 “参数”是一个变量 而“长度”是一个属性 我没能区分这两个
更多信息,请参考 this post
【问题讨论】:
-
此函数声明无效 javascript 。我想你应该看到arguments doc
-
@Haketo:除非您指的是最后一行代码,否则不确定您在说什么。前两个函数声明是有效的。 (调用时它们都可能会失败,第一个是因为
arguments上缺少s,第二个是因为可能没有范围内的length变量,但是...) -
@T.J.Crowder 你是在说那个
function sum(a,b,){吗?因为这会抛出语法错误 -
@T.J.Crowder 只是一个错字,我的意思是参数
-
@Haketo:啊,错过了额外的
,
标签: javascript