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" 在我的全球和本地范围内。有没有办法我仍然可以保留这些名字,或者我是否已经重命名其中一个?如果我需要重命名,这里有没有好的约定好?

Fiddle

https://jsfiddle.net/2ar2upqw/

几乎总是应该避免使用全局变量,因为就像这样的名称冲突。

至少我会将 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);