JavaScript初级开发
【翻译】刚子
【原文出自】html5mobi.com
【本系列索引】Titanium文档翻译索引贴
对于开发者来说,Titanium开发的应用程序运行资源是有限的,我们希望分享最重要的开发实践,确保高性能应用。
内容提示 :
不破坏全局作用域
用 === 和 !== 替代 == 和 !=
三元操作符
变量很多?用逗号
高效的循环
自调用函数
用Android/Rhino时,避开深度嵌套
不破坏全局作用域
在JavaScript执行上下文中,所有的变量默认都是全局的。改变变量作用域的唯一方式是放置他们在一个function之内(在function内部,如果你不包含var关键字,你的变量被处理成全局变量)。一种比全局变量/函数的更好方式是封闭你应用的API函数和属性在同一个命名空间内。这将使你的代码和其他包含的库代码发生冲突时做最小改变。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
//app.js//------// BAD – 我们在全局范围内放置变量,可能发生冲突var key = 'value', foo = 'bar', charlie = 'horse';function helper() { //help out}function info(msg) { helper(msg); Ti.API.info(msg);}// Better – 预定义一个namespace持有所有变量var myapp = {}; // namespace and only global variablemyapp.key = 'value';/* Or, define the namespace and a few variables all at once withvar myapp = { key: 'value', foo: 'bar', charlie: 'horse'};*/// add a function to your namespacemyapp.dosomething = function(foo) { // do something};// 用self-calling方式扩展和封装函数(function() { function helper() { // this is a private function not directly accessible from the global scope } myapp.info = function(msg) { // added to the app's namespace, so a public function helper(msg); Ti.API.info(msg) };})();// you could then call your function withmyapp.info('Hello World'); |
用 === 和 !== 替代 == 和 !=
JavaScript在条件语句中,将自动转换值,除非你告诉他不这样做。
|
1
2
3
4
5
6
7
8
9
10
11
|
var testme = '1';if(testme == 1) { // 这里将被执行到,因为'1' 被转换成整数。}// 如果两个操作数类型和值都相等,===返回true并且!===返回false。var testme = '1';if(testme === 1) { // 这里将不被执行} |
三元操作符
JavaScript三元操作符方便的使条件块变成单一语句。
|
1
2
3
4
5
6
7
8
|
// 你可以这样if(somecondition === somevalue) { var xyz = 'abc';} else { var xyz = '123';}// 但是这样更简洁var xyz = (somecondition === somevalue) ? 'abc' : '123'; |
变量很多?用逗号
你不需要在每个变量前放var关键字—而是用逗号代替。
|
1
|
// 你可以这样 var foo = true; var me = 'awesome'; // 更好的方式 var foo = true, me = 'awesome'; |
高效的循环
大多数情况下,在每次迭代期间检查数组的长度是缓慢的。这种情况当使用Titanium代理对象(表示一些原生结构)时更加突出。因此另可不写成这样:
|
1
2
3
4
|
var names = ['Jeff','Nolan','Marshall','Don'];for(var i=0;i<names.length;i++){ process(names[i]);} |
更好的做法是仅获得一次数组长度:
|
1
2
3
4
|
var names = ['Jeff','Nolan','Marshall','Don'];for(var i=0,j=names.length;i<j;i++){ process(names[i]);} |
自调用函数
在JavaScript中,自调用函数(Self-calling functions)是封装私有变量和函数的有用模式。
在这种情况下,myValue不是一个function,而是function返回的值。
|
1
2
3
4
|
var myValue = (function() { //do stuff return someValue;})(); |
在这种情况下,myValue不是一个function,而是function返回的值。
用Android/Rhino时,避开深度嵌套
在Android,Rhino偶尔会引起你的应用内存溢出如果你有几个层次的递归或迭代函数。如果你有“递归太深”的错误,可以尝试扁平化你的代码在你有几层嵌套循环或递归的代码区域。
SpaceBuilder,构建您的空间...

浙公网安备 33010602011771号