【发布时间】:2011-12-10 01:10:17
【问题描述】:
var str = 'internet';
performAction(function(str) {
console.log(str);
});
有一个私有变量str,还有一个同名参数的回调函数有问题吗?
谢谢!
【问题讨论】:
-
不——只是不要忘记它实际上不是同一个变量。
标签: javascript scope
var str = 'internet';
performAction(function(str) {
console.log(str);
});
有一个私有变量str,还有一个同名参数的回调函数有问题吗?
谢谢!
【问题讨论】:
标签: javascript scope
这只是一个标准范围的情况——它是一个匿名函数表达式作为参数传递给另一个函数的事实并不重要。请注意,在您的 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。它们是两个不同的变量...
【讨论】:
技术上没有问题。该函数将记录当前范围内的str(您的参数)。
出于显而易见的原因,这不是一个好主意。至少,它会产生不可读的代码。
【讨论】: