在我的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
。简而言之,它可以工作,但是,如果我在名为console.log(getCookieVal("lang"))
的另一个文件中使用data.js
则行不通。
我真的需要使用getCookieVal("lang")
来根据Cookie语言确定要使用的变量。
这是完整的代码:
var dict = {};
var systemLang = navigator.language.toLowerCase().slice(0, 2);
我已经将函数从包装器中取出,因此现在应该是全局函数,但仍未定义。使问题变得简单。您会看到,我将systemLang
设置为全局变量,但是在其他console.log(systemLang)
文件中使用了.js
。没有定义。
答案 0 :(得分:2)
听起来这些功能都在某种包装中,例如jQuery ready
回调:
$(function() {
function setCookie(cookie) {
// ...
}
function setLanguage(lang) {
// ...
}
});
或范围界定的IIFE:
(function() {
function setCookie(cookie) {
// ...
}
function setLanguage(lang) {
// ...
}
})();
这意味着它们不是全球性的。如果您希望它们是全局的,请确保它们是在顶级声明的,而不是在任何内容中声明的:
function setCookie(cookie) {
// ...
}
function setLanguage(lang) {
// ...
}
JavaScript不会关注函数所在的文件(除非您使用模块,但我认为您不在),所有全局变量都是真正的全局变量,而与文件无关。
我应该注意,使用全局变量通常不是最佳实践。浏览器上的全局命名空间非常很拥挤。相反,请查看各种模块捆绑器等。
答案 1 :(得分:0)
在一个文件中 localStorage.setItem('TheVariableNameYouWant',TheValueofTheVariableYouWant);
在另一个文件中 localStorage.getItem('TheVariableNameYouWant')