JavaScript:与其他变量同名的回调函数参数?

时间:2011-12-10 01:10:17

标签: javascript scope

var str = 'internet';

performAction(function(str) {
    console.log(str);
});

拥有私有变量str并且还有一个带有同名参数的回调函数是否有问题?

谢谢!

2 个答案:

答案 0 :(得分:11)

这只是一个标准的范围情况 - 它是一个作为参数传递给另一个函数的匿名函数表达式并不重要。请注意,在performAction()函数(您未显示)中,如果str引用{{1},它将无法访问作为回调函数参数的performAction()。它将获得全局“互联网”变量(或者如果定义了它自己的本地str)。

出于作用域的目的,函数的参数与该函数的局部变量相同,这意味着它们从外部作用域中屏蔽了同名的其他变量 - 但即使在更广泛的范围内定义,仍然可以访问具有不同名称的变量

如果你这样做会让人感到困惑:

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。它们是两个不同的变量......

答案 1 :(得分:7)

技术上没问题。该函数将记录当前在范围内的str(您的参数)。

出于显而易见的原因,这不是一个好主意。至少,它会产生无法读取的代码。