Javascript 本地变量不重写同名的参数?

Javascript 本地变量不重写同名的参数?,javascript,Javascript,这让我大吃一惊: 函数f(x){ var x; console.log(x);//打印100! } f(100)变量var和参数在相同的函数范围内声明相同的变量x。创建变量时,将其初始化为未定义,并在分配值100后不久作为参数传递。来自: 说明 …如果重新声明JavaScript变量,它不会丢失其值 在第一个示例中,由于函数f中已经声明了x(作为参数),因此在同一个函数中重新声明它(使用var)将在重新声明之前保持x的相同值(这是调用f时给定的参数) 在第二个示例中,x在函数f中声明。因此,当

这让我大吃一惊:

函数f(x){
var x;
console.log(x);//打印100!
}

f(100)
变量
var
和参数在相同的函数范围内声明相同的变量
x
。创建变量时,将其初始化为
未定义
,并在分配值
100
后不久作为参数传递。

来自:

说明

…如果重新声明JavaScript变量,它不会丢失其值

在第一个示例中,由于函数
f
中已经声明了
x
(作为参数),因此在同一个函数中重新声明它(使用
var
)将在重新声明之前保持
x
的相同值(这是调用
f
时给定的参数)


在第二个示例中,
x
在函数
f
中声明。因此,当查找
x
的值以传递到
log
时,我们在
f
内部使用该
x
(而不是外部的),并且由于我们没有显式地给它一个值(初始化它),它的值对于函数代码将是
未定义的,参数也作为绑定添加到该环境记录。

已定义的参数
x
被移至当前函数。由于函数中已经声明了
x
,因此
var x
作为参数;声明将被忽略


有关更多详细信息:

基本上忽略了
var
声明,因为符号已经声明。第二个代码示例不相关,因为涉及两个不同的范围。函数声明中的形式参数列表与函数词法范围中的参数符号的
var
声明有效地做了相同的事情。
local var
——这个短语让我觉得您误解了局部变量的真正含义。函数参数也是局部变量。所以基本上你所做的是:
varx=100;var x
在javascript中是合法的,允许人们在for循环中声明
var