2014-10-20 83 views
2

为什么下面的代码不提示未定义?如何在JavaScript中为参数赋值给具有相同名称的变量?

function test(param){ 
    var param = param; 
    alert(param); 
} 
test("SO"); // alerts SO 

这怎么正在被分配给本地变量的参数是与函数的参数相匹配,而不是与局部变量本身?
权值是否具有函数参数的“匹配偏好”或原因是什么?

+0

该代码不会返回'undefined'警报关闭后。 – Andy 2014-10-20 12:31:58

+0

你是对的,我没有清楚地表达自己,已经根据我的意思编辑我的问题。 – 2014-10-20 14:43:32

回答

2

有两个部分

var param = param; 

第一个是VAR声明:

var param; 

第二个是assignement:

param = param; 

的VAR声明不做任何事,因为变量已经存在(变量的范围是整个函数调用)。这个分配没有作用,因为它保持了同样的价值。

您可以检查通过分配不同的值:

function test(param){ 
    console.log('1', param) // logs "SO" 
    var param = param+"4"; 
    console.log('2', param) // logs "SO4" 
} 
test("SO"); 
+0

“变量的范围是整个函数的调用”我不知道我是否正确,它是否意味着函数参数在函数内部被隐式声明? – 2014-10-20 14:19:30

+0

是的,函数参数被声明为变量(这也意味着你可以改变它们的值)。 – 2014-10-20 14:22:57

+0

太棒了!接受你的答案。 – 2014-10-20 14:38:50

相关问题