在函数中为变量赋值变量

can*_*289 2 javascript closures scope shadow hoisting

我正在尝试在函数中为自己分配一个变量,如果变量与函数的参数同名,它似乎不起作用,但如果它们不是同一个名称.代码示例更清楚地显示了这一点.

我应该期待这种行为吗?这是我的d3用例的一个简化示例,它提示了这个问题.我也在下面展示过.

非工作的例子

var a;

function assign(a) {
    a = a;
}
assign("test")
console.log(a)
Run Code Online (Sandbox Code Playgroud)

未定义

工作实例

var a;

function assign(b) {
    a = b;
}
assign("test")
console.log(a)
Run Code Online (Sandbox Code Playgroud)

测试

用例

var data
d3.csv("data.csv", function(error, data) {
    //Doesn't work for me
    data = data
}
console.log(data)
Run Code Online (Sandbox Code Playgroud)

未定义

小智 5

在第一个示例中,参数a被传递给函数阴影可变a其外侧限定,所以:a=a是参数的分配(即传递给功能)到其自身.