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