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

Fil*_*cks 9 javascript scope

var str = 'internet';

performAction(function(str) {
    console.log(str);
});
Run Code Online (Sandbox Code Playgroud)

有一个私有变量str,还有一个带有同名参数的回调函数有问题吗?

谢谢!

nnn*_*nnn 11

这只是一个标准的范围情况 - 它是一个作为参数传递给另一个函数的匿名函数表达式并不重要.请注意,在您的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"
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我有一个带有参数的函数,str但是当我调用它时,我传递的是另一个str.请注意,str在该函数内更改仅更改本地str而不是全局.它们是两个不同的变量......


Jam*_*ill 7

技术上与它没有任何问题.该函数将记录str当前在范围内的信息(您的参数).

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