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 variable
myapp.key = 'value';
 
/* Or, define the namespace and a few variables all at once with
var myapp = {
    key: 'value',
    foo: 'bar',
    charlie: 'horse'
};
*/
 
// add a function to your namespace
myapp.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 with
myapp.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)是封装私有变量和函数的有用模式。

1
2
3
4
var myValue = (function() {
    //do stuff
    return someValue;
})(); 

在这种情况下,myValue不是一个function,而是function返回的值。 

 

用Android/Rhino时,避开深度嵌套

 

在Android,Rhino偶尔会引起你的应用内存溢出如果你有几个层次的递归或迭代函数。如果你有“递归太深”的错误,可以尝试扁平化你的代码在你有几层嵌套循环或递归的代码区域。
posted @ 2014-06-25 09:51  解然  阅读(120)  评论(0)    收藏  举报