[英]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.