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

JavaScript: callback function parameter with same name as other variable?

本文关键字:回调 函数 参数 其他 变量 JavaScript      更新时间:2023-09-26
var str = 'internet';
performAction(function(str) {
    console.log(str);
});

具有私有变量str并且还具有具有同名参数的回调函数是否存在问题?

谢谢!

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

出于显而易见的原因,这不被认为是一个好主意。至少,它会导致代码不可读。