Javascript 全局变量与局部变量冲突
Javascript collision global variable with local variable
这不是我的真实代码,但它适用于这个问题:
var string = 'Global';
function setStringToGlobal(string) {
string = string;
}
function getStringFromGlobal() {
console.log(string);
}
setStringToGlobal('haha');
getStringFromGlobal(); // In console log it says "Global", not "haha"
- 首先,我尝试将全局 "string" 变量设置为 "haha"。
- 然后我尝试获取它并在控制台日志中打印出来。
- 它不起作用,因为全局和局部变量都被调用 "string"
问题
我喜欢 "string" 在我的全球和本地范围内。有没有办法我仍然可以保留这些名字,或者我是否已经重命名其中一个?如果我需要重命名,这里有没有好的约定好?
Fiddle
几乎总是应该避免使用全局变量,因为就像这样的名称冲突。
至少我会将 space 你的全局变量命名为 window 对象,正如 Jaromanda 提到的那样。 window.string = string
因为通常避免使用全局变量,所以没有针对它们的命名约定(据我所知)。使用全部大写 STRING
通常会为常量保留。
旁注:
这可能更多是方法问题。如果您还没有,我会研究模块模式,这将帮助您管理范围。 https://toddmotto.com/mastering-the-module-pattern/
我看到的一个利用模块模式的替代方案:
(function (global) {
global.string = 'Global';
function setStringToGlobal(string) {
global.string = string;
}
function getStringFromGlobal() {
console.log(global.string);
}
})(window);
这不是我的真实代码,但它适用于这个问题:
var string = 'Global';
function setStringToGlobal(string) {
string = string;
}
function getStringFromGlobal() {
console.log(string);
}
setStringToGlobal('haha');
getStringFromGlobal(); // In console log it says "Global", not "haha"
- 首先,我尝试将全局 "string" 变量设置为 "haha"。
- 然后我尝试获取它并在控制台日志中打印出来。
- 它不起作用,因为全局和局部变量都被调用 "string"
问题
我喜欢 "string" 在我的全球和本地范围内。有没有办法我仍然可以保留这些名字,或者我是否已经重命名其中一个?如果我需要重命名,这里有没有好的约定好?
Fiddle
几乎总是应该避免使用全局变量,因为就像这样的名称冲突。
至少我会将 space 你的全局变量命名为 window 对象,正如 Jaromanda 提到的那样。 window.string = string
因为通常避免使用全局变量,所以没有针对它们的命名约定(据我所知)。使用全部大写 STRING
通常会为常量保留。
旁注:
这可能更多是方法问题。如果您还没有,我会研究模块模式,这将帮助您管理范围。 https://toddmotto.com/mastering-the-module-pattern/
我看到的一个利用模块模式的替代方案:
(function (global) {
global.string = 'Global';
function setStringToGlobal(string) {
global.string = string;
}
function getStringFromGlobal() {
console.log(global.string);
}
})(window);