var str = 'internet';
performAction(function(str) {
console.log(str);
});
是否存在私有变量str
并且具有带同名参数的回调函数的问题?JavaScript:与其他变量具有相同名称的回调函数参数?
谢谢!
var str = 'internet';
performAction(function(str) {
console.log(str);
});
是否存在私有变量str
并且具有带同名参数的回调函数的问题?JavaScript:与其他变量具有相同名称的回调函数参数?
谢谢!
这只是一个标准的作用域情况 - 事实上它是一个匿名函数表达式作为参数传递给另一个函数并不重要。请注意,在您的performAction()
函数(您没有显示)中,它将无法访问作为回调函数参数的str
- 如果performAction()
引用str
,它将获得全局“internet”变量(或其自身的本地如果定义,则为str
)。
为了作用域的目的,函数的参数与该函数的局部变量相同,这意味着它们会从外部作用域中屏蔽相同名称的其他变量 - 但具有不同名称的变量仍然可以访问,即使定义在更宽范围。
那里可以得到令人困惑是,如果你做这样的事情:
var str = "internet";
(function(str) {
console.log(str); // "internet"
str = "local param";
console.log(str); // "local param"
})(str);
console.log(str); // "internet"
在这种情况下,我有一个名为str
参数的功能,但是当我把它称为我传递一个不同str
。请注意,在该功能中更改str
仅更改本地str
,而不是全局。他们是两个不同的变量...
技术上有没问题。该函数将记录当前在作用域(您的参数)中的str
。
由于显而易见的原因,这不被认为是一个好主意。至少,它会导致无法读取的代码。
不 - 不要忘记,它不是实际上是相同的变量。 –
非常感谢! –