扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如何使用JavaScript实现多语言处理?
创新互联公司网站建设服务商,为中小企业提供成都做网站、网站建设服务,网站设计,网站托管、服务器托管等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出创新互联公司。
很多时候需要用到多语言技术,JavaScript里面也是非常普遍的,比如日历插件的中文版本、英文版本。
JavaScript中实现多语言思路
最直接的一种就是将需要翻译的语言做成参数,每个参数组成的集合做成一个文件,然后再程序里面调用这个文件中的参数即可。
JavaScript语言包具体实现
在以上思路指导下,可以利用下面的办法实现。
直观的是把每个需要翻译的处理成变量,变量值组成的集合统一为一个文件,比如zh-cn.js / en.js等。
变量声明简单的如下所示:
var lang_a="copy";
var lang_b="复制"
还有一种做法,是将以上数据放在Jason数据中,然后利用eval函数解析和读取。这个有很多的好处,目前绝大多数的JavaScript语言包都是利用这种方式进行处理的。
所谓打包就是将多个js文件合并,压缩,为什么需要打包呢,因为js合并之后可以减少前端js引用js的数量和体积,数量少了js加载就相对快一些。为什么会说体积也减小了呢,因为现在流行的打包工具例如webpack在打包的过程中不只是简单的把多个js文件合并成一个文件这么简单,它还会多js进行压缩,例如去掉无效的空格,替换较长的变量名函数名等,最后让你的js文件变得更小。
什么是javascript闭包?
javascript允许使用内部函数,内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
简单的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实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage
collection)回收。
这段代码中另一个值得注意的地方,就是"nAdd=function(){n+=1}"这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous
function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
闭包的应用:
var
singleton
=
function
()
{
var
privateVariable;
function
privateFunction(x)
{
...privateVariable...
}
return
{
firstMethod:
function
(a,
b)
{
...privateVariable...
},
secondMethod:
function
(c)
{
...privateFunction()...
}
};
}();
这个单件通过闭包来实现。通过闭包完成了私有的成员和方法的封装。匿名主函数返回一个对象。对象包含了两个方法,方法1可以方法私有变量,方法2访问内部私有函数。需要注意的地方是匿名主函数结束的地方的'()',如果没有这个'()'就不能产生单件。因为匿名函数只能返回了唯一的对象,而且不能被其他地方调用。这个就是利用闭包产生单件的方法。
闭包的优势:
(1)不增加额外的全局变量,
(2)执行过程中所有变量都是在匿名函数内部。
闭包的缺点:
(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public
Method),把内部变量当作它的私有属性(private
value),这时一定要小心,不要随便改变父函数内部变量的值。
本文就为大家介绍这里,如果大家对javascript闭包还是不够了解,请阅读相关文章进行补充学习,谢谢大家的阅读。
定义在函数内部的,能访问外部函数的变量的函数叫做闭包。
所以闭包是相对的。就像你上面:
function(){
return "我的父亲(getNameFunc)不是闭包,我才是闭包,这是为什么呢?";
};
这个匿名函数是定义在getNameFunc方法内的,能访问getNameFunc中的属性,所以他才是闭包。
抓包大致有以下两种途径:
可以用第三方软件,比如fiddler(本机需要有.net 运行环境):
优点是功能完善,不但可以用多种格式分析请求和回应,还有计算时间,拦截https消息,手动修改请求和回应等功能。
2. 用浏览器自带的分析器:
firefox安装firebug插件, 按F12,切换到 Net 标签页:
IE浏览器, 按F12,切换到网络标签页,启用流量监视:
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流