簡體   English   中英

如何在JavaScript中設置全局變量和全局函數

[英]How to set global variables and global functions in JavaScript

在我的language.js ,我有:

function setCookie(cookie) {
  var Days = 30; //this cookie will keep 30 days 
  var exp = new Date(); //new Date("December 31, 9998");
  exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
  document.cookie = cookie + ";expires=" + exp.toGMTString();
}

function setLanguage(lang) {
  setCookie("lang=" + lang + "; path=/;");
  translate(lang);
}

稍后的:

switch (getCookieVal("lang")) {
  case "en":
    setLanguage("en");
    break
  case "zh":
    setLanguage("zh");
    break
  default:
    setLanguage(systemLang);
}

這使console.log(getCookieVal("lang")); 打印zh 一言以蔽之,但是,如果我在另一個名為data.js文件中使用console.log(getCookieVal("lang")) ,它將無法正常工作。

我確實需要使用getCookieVal("lang")來根據Cookie語言確定要使用的變量。

這是完整的代碼:

var dict = {};
var systemLang = navigator.language.toLowerCase().slice(0, 2);

我已經將函數從包裝器中取出,因此現在應該是全局函數,但仍未定義。 使問題變得簡單。 您會看到,我將systemLang為全局變量,但是在其他.js文件中使用console.log(systemLang) 未定義。

聽起來這些功能都在某種包裝中,例如jQuery ready回調:

$(function() {
    function setCookie(cookie) {
        // ...
    }
    function setLanguage(lang) {
        // ...
    }
});

或范圍界定的IIFE:

(function() {
    function setCookie(cookie) {
        // ...
    }
    function setLanguage(lang) {
        // ...
    }
})();

這意味着它們不是全球性的。 如果您希望它們是全局的,請確保在頂層(而不是任何內容中)聲明它們:

function setCookie(cookie) {
    // ...
}
function setLanguage(lang) {
    // ...
}

JavaScript不會關注函數所在的文件(除非您使用模塊,但我認為您不在),所有全局變量都是真正的全局變量,而不管文件是什么。


我應該注意,使用全局變量通常不是最佳實踐。 瀏覽器上的全局名稱空間非常擁擠。 相反,請查看各種模塊捆綁器等。

在一個文件中,localStorage.setItem('TheVariableNameYouWant',TheValueofTheVariableYouWant);

在另一個文件中,localStorage.getItem('TheVariableNameYouWant')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM