在函数中将变量赋值给自身
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)
的更多信息
在Javascript中,作用域是功能级作用域,因此每当引用变量时,都会在包含作用域(函数)中搜索它的声明,如果找到它就使用它,否则它会继续搜索原型链到全球范围。因此,在您的情况下,它会尝试搜索 a
并将其作为参数 a
找到,因此它会在那里停止搜索并使用参数中的 a
。
因此,为了避免冲突,您使用了两种方法。
- 使用不同的名称
- 如果您想使用相同的名称,请使用显式范围解析。
例如。
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);
有助于更清晰理解的有用链接
- Closures
- Variable Hoisting
我正在尝试在函数中将一个变量分配给它自己,如果变量与函数的参数同名,它似乎不起作用,但如果它们不相同,它就会起作用姓名。代码示例更清楚地说明了这一点。
这是我应该预料到的行为吗?这是我的 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)
的更多信息
在Javascript中,作用域是功能级作用域,因此每当引用变量时,都会在包含作用域(函数)中搜索它的声明,如果找到它就使用它,否则它会继续搜索原型链到全球范围。因此,在您的情况下,它会尝试搜索 a
并将其作为参数 a
找到,因此它会在那里停止搜索并使用参数中的 a
。
因此,为了避免冲突,您使用了两种方法。
- 使用不同的名称
- 如果您想使用相同的名称,请使用显式范围解析。
例如。
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);
有助于更清晰理解的有用链接
- Closures
- Variable Hoisting