1

我正在尝试使用 IIFE 和语言文件来使我的代码本地化。问题是 IIFE 一直说语言代码中的变量不存在。我试图弄清楚为什么,如果有人可以向我解释一下为什么以及我应该如何去做,那就太棒了!

例子

IIFE-

 (function(w,d,id){
    if(!d.getElementById(id)){
      var fjs = d.createElement('script');
          fjs.id=id;
          fjs.src="url_lang_file";//this is where the language code is inserted
          document.head.appendChild(fjs);
       }

     console.log(lang);
  })(window,document,'support_lang');

语言代码-

   var lang={
       hello:"hello",
       bye:"GoodBye"
   };

尽管日志记录不起作用并且 lang 是“未定义的”,但我已经尝试了很多方法来使其正常工作,尽管我尝试过的任何东西都不足。

这是一个举个例子的小提琴,我使用 jQuery CDN 进行测试

4

1 回答 1

1

console.log(lang);语句是在加载语言文件之前执行的,问题是关于异步代码的概念。

lang加载语言文件后,您必须访问该对象。

这是解决此问题的方法。

(function(win,d,id){
    if(!d.getElementById(id)){
      var fjs = d.createElement('script');
          fjs.id=id;
          fjs.src="lang.js";//this is where the language code is inserted
          document.head.appendChild(fjs);
          fjs.onload = function (){
             //console.log(lang);
            //here your lang object is accessable after load file.
          }
           //console.log(lang);
           //here lang object is not accessible 
            //because it executes before the language file is loaded

       }
  })(window,document,'support_lang');
于 2014-02-15T06:52:58.603 回答