如何使用JavaScript實(shí)現(xiàn)多語言處理?

創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管、服務(wù)器托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)公司。
很多時(shí)候需要用到多語言技術(shù),JavaScript里面也是非常普遍的,比如日歷插件的中文版本、英文版本。
JavaScript中實(shí)現(xiàn)多語言思路
最直接的一種就是將需要翻譯的語言做成參數(shù),每個(gè)參數(shù)組成的集合做成一個(gè)文件,然后再程序里面調(diào)用這個(gè)文件中的參數(shù)即可。
JavaScript語言包具體實(shí)現(xiàn)
在以上思路指導(dǎo)下,可以利用下面的辦法實(shí)現(xiàn)。
直觀的是把每個(gè)需要翻譯的處理成變量,變量值組成的集合統(tǒng)一為一個(gè)文件,比如zh-cn.js / en.js等。
變量聲明簡(jiǎn)單的如下所示:
var lang_a="copy";
var lang_b="復(fù)制"
還有一種做法,是將以上數(shù)據(jù)放在Jason數(shù)據(jù)中,然后利用eval函數(shù)解析和讀取。這個(gè)有很多的好處,目前絕大多數(shù)的JavaScript語言包都是利用這種方式進(jìn)行處理的。
所謂打包就是將多個(gè)js文件合并,壓縮,為什么需要打包呢,因?yàn)閖s合并之后可以減少前端js引用js的數(shù)量和體積,數(shù)量少了js加載就相對(duì)快一些。為什么會(huì)說體積也減小了呢,因?yàn)楝F(xiàn)在流行的打包工具例如webpack在打包的過程中不只是簡(jiǎn)單的把多個(gè)js文件合并成一個(gè)文件這么簡(jiǎn)單,它還會(huì)多js進(jìn)行壓縮,例如去掉無效的空格,替換較長(zhǎng)的變量名函數(shù)名等,最后讓你的js文件變得更小。
什么是javascript閉包?
javascript允許使用內(nèi)部函數(shù),內(nèi)部函數(shù)可以訪問它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個(gè)這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時(shí),就會(huì)形成閉包。
簡(jiǎn)單的javascript閉包例子:
script
function
f1(){
var
n=999;
nAdd=function(){n+=1}
function
f2(){
alert(n);
}
return
f2;
}
var
result=f1();
result();
//
999
nAdd();
result();
//
1000
/script
在這段代碼中,result實(shí)際上就是閉包f2函數(shù)。它一共運(yùn)行了兩次,第一次的值是999,第二次的值是1000。這證明了,函數(shù)f1中的局部變量n一直保存在內(nèi)存中,并沒有在f1調(diào)用后被自動(dòng)清除。
為什么會(huì)這樣呢?原因就在于f1是f2的父函數(shù),而f2被賦給了一個(gè)全局變量,這導(dǎo)致f2始終在內(nèi)存中,而f2的存在依賴于f1,因此f1也始終在內(nèi)存中,不會(huì)在調(diào)用結(jié)束后,被垃圾回收機(jī)制(garbage
collection)回收。
這段代碼中另一個(gè)值得注意的地方,就是"nAdd=function(){n+=1}"這一行,首先在nAdd前面沒有使用var關(guān)鍵字,因此nAdd是一個(gè)全局變量,而不是局部變量。其次,nAdd的值是一個(gè)匿名函數(shù)(anonymous
function),而這個(gè)匿名函數(shù)本身也是一個(gè)閉包,所以nAdd相當(dāng)于是一個(gè)setter,可以在函數(shù)外部對(duì)函數(shù)內(nèi)部的局部變量進(jìn)行操作。
閉包的應(yīng)用:
var
singleton
=
function
()
{
var
privateVariable;
function
privateFunction(x)
{
...privateVariable...
}
return
{
firstMethod:
function
(a,
b)
{
...privateVariable...
},
secondMethod:
function
(c)
{
...privateFunction()...
}
};
}();
這個(gè)單件通過閉包來實(shí)現(xiàn)。通過閉包完成了私有的成員和方法的封裝。匿名主函數(shù)返回一個(gè)對(duì)象。對(duì)象包含了兩個(gè)方法,方法1可以方法私有變量,方法2訪問內(nèi)部私有函數(shù)。需要注意的地方是匿名主函數(shù)結(jié)束的地方的'()',如果沒有這個(gè)'()'就不能產(chǎn)生單件。因?yàn)槟涿瘮?shù)只能返回了唯一的對(duì)象,而且不能被其他地方調(diào)用。這個(gè)就是利用閉包產(chǎn)生單件的方法。
閉包的優(yōu)勢(shì):
(1)不增加額外的全局變量,
(2)執(zhí)行過程中所有變量都是在匿名函數(shù)內(nèi)部。
閉包的缺點(diǎn):
(1)由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會(huì)造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存泄露。解決方法是,在退出函數(shù)之前,將不使用的局部變量全部刪除。
(2)閉包會(huì)在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。所以,如果你把父函數(shù)當(dāng)作對(duì)象(object)使用,把閉包當(dāng)作它的公用方法(Public
Method),把內(nèi)部變量當(dāng)作它的私有屬性(private
value),這時(shí)一定要小心,不要隨便改變父函數(shù)內(nèi)部變量的值。
本文就為大家介紹這里,如果大家對(duì)javascript閉包還是不夠了解,請(qǐng)閱讀相關(guān)文章進(jìn)行補(bǔ)充學(xué)習(xí),謝謝大家的閱讀。
定義在函數(shù)內(nèi)部的,能訪問外部函數(shù)的變量的函數(shù)叫做閉包。
所以閉包是相對(duì)的。就像你上面:
function(){
return?"我的父親(getNameFunc)不是閉包,我才是閉包,這是為什么呢?";
};
這個(gè)匿名函數(shù)是定義在getNameFunc方法內(nèi)的,能訪問getNameFunc中的屬性,所以他才是閉包。
抓包大致有以下兩種途徑:
可以用第三方軟件,比如fiddler(本機(jī)需要有.net 運(yùn)行環(huán)境):
優(yōu)點(diǎn)是功能完善,不但可以用多種格式分析請(qǐng)求和回應(yīng),還有計(jì)算時(shí)間,攔截https消息,手動(dòng)修改請(qǐng)求和回應(yīng)等功能。
2. 用瀏覽器自帶的分析器:
firefox安裝firebug插件, 按F12,切換到 Net 標(biāo)簽頁:
IE瀏覽器, 按F12,切換到網(wǎng)絡(luò)標(biāo)簽頁,啟用流量監(jiān)視:
文章名稱:javascript炸包,Java炸包
文章源于:http://chinadenli.net/article40/dsegheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、電子商務(wù)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)