Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将函数参数赋给具有类似名称的隐式全局变量_Javascript_Html - Fatal编程技术网

Javascript 将函数参数赋给具有类似名称的隐式全局变量

Javascript 将函数参数赋给具有类似名称的隐式全局变量,javascript,html,Javascript,Html,我不确定这是不是一个适合这个论坛的问题。但我将在这里发布它。我写了一段代码,看看如果一个隐式全局变量与分配给它的函数参数具有相似的名称,会发生什么。但是当我在函数的作用域之外console.log全局名称变量时,它会发生什么打印出“Baggins”,我不知道它来自哪里 function myfunc(name){ name=name;//global name variable?? console.log(name); } myfunc('shimanta'); console.log(

我不确定这是不是一个适合这个论坛的问题。但我将在这里发布它。我写了一段代码,看看如果一个隐式全局变量与分配给它的函数参数具有相似的名称,会发生什么。但是当我在函数的作用域之外console.log全局名称变量时,它会发生什么打印出“Baggins”,我不知道它来自哪里

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

火狐:


函数参数列表中列出的所有变量都将成为局部变量。因此,函数只是将局部变量名设置为自身。如果要设置全局变量,必须通过窗口对象访问它:

函数myfuncname{ window.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变量的作用域,不再需要担心使用全局变量了!查看此工作签出。

您验证了gotit.html的源代码,没有运行其他javascript?我在chrome中看到了页面源代码。它包含与我在此发布的代码完全相同的代码回答您的问题,没有,函数中的name变量引用了您传入的文本,不是全局名称变量。您可以打开开发工具,切换到“源”选项卡,使用Ctrl+Shift+F并搜索名称源吗?您知道您的屏幕截图没有显示控制台吗?为什么不创建没有窗口的全局变量。在firefox中,如果它与参数同名,那么它将是一个局部变量,而不是全局变量。