在函数中将变量赋值给自身

Assigning a variable to itself in a function

我正在尝试在函数中将一个变量分配给它自己,如果变量与函数的参数同名,它似乎不起作用,但如果它们不相同,它就会起作用姓名。代码示例更清楚地说明了这一点。

这是我应该预料到的行为吗?这是我的 d3 用例的精简示例,它提示了这个问题。我也在下面展示了这一点。

无效示例

var a;

function assign(a) {
    a = a;
}
assign("test")
console.log(a)

undefined

工作示例

var a;

function assign(b) {
    a = b;
}
assign("test")
console.log(a)

test

用例

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

undefined

在您的第一个示例中,传递给函数的参数 a shadows 变量 a 在外部定义,因此: a=a 是赋值参数(传递给函数)本身。

您可以使用 window 对象来访问全局变量。

var a;

function assign(a) {
    window.a = a; // specifying the scope.
};
assign("test")
console.log(a)

有关 15-common-javascript-gotchas

的更多信息

在Javascript中,作用域是功能级作用域,因此每当引用变量时,都会在包含作用域(函数)中搜索它的声明,如果找到它就使用它,否则它会继续搜索原型链到全球范围。因此,在您的情况下,它会尝试搜索 a 并将其作为参数 a 找到,因此它会在那里停止搜索并使用参数中的 a

因此,为了避免冲突,您使用了两种方法。

  1. 使用不同的名称
  2. 如果您想使用相同的名称,请使用显式范围解析。

例如。

var a;

function assign(a) {
   Global.a = a //Global is placeholder here for outerscope that variable a is coming from.
}
assign("test")
console.log(a);

有助于更清晰理解的有用链接