将函数参数分配给具有相似名称的隐式全局变量

assigning function argument to an implicit global variable having similar name

我不确定这个问题是否适合这个论坛,或者 not.But 我要去 post 它 here.I 有我写的这段代码要看如果隐式全局变量具有与分配给 it.But 的函数参数相似的名称,当我 console.log 全局名称变量超出函数范围时,它会打印出 'Baggins' ,我不知道会发生什么从哪里来。

function myfunc(name){
  name=name;//global name variable??
  console.log(name);
}
myfunc('shimanta');
console.log(name);

CHROME:

火狐浏览器:

函数参数列表中列出的所有变量都成为局部变量。所以函数只是将局部变量 name 设置为它自己。如果你想设置全局变量,你必须通过 window 对象访问它:

function myfunc(name) {
  window.name = name;
  alert(name);
}
myfunc('shimanta');
alert(name);

这里的问题可能是使用了全局变量 name。此问题的最佳解决方案之一是将其转换为一个对象,然后使用该对象来管理 Javascript 中的范围。修改后的代码看起来几乎一样:

var nameManager = function () {
  var self = {};
  var name = '';

  self.myfunc = function(name){
    self.name = name;
    console.log(self.name);
  };

  self.logName = function () {
    console.log(self.name);
  };

  return self;
};

var myManager = nameManager();
myManager.myfunc('shimanta');
myManager.logName();

现在您已经有效地确定了 name 变量的范围,您不必再担心使用全局变量了!要查看此工作结帐 this fiddle.