LiveScript 眾多的語法糖衣中, do
算是被附加最多功能的 keyword .
所以整理一下目前已知的用法備忘。
1. execute
如同 do
字面的意思,就是執行。後面可以跟的是 Function or Array .
do Function
如:
# anonymous function
do ->
x = 5
# named function
a = ->
x = 5
do a
# declare named function and execute it
do function f
x = 5
會產生出
// anonymous function
(function(){
var x;
return x = 5;
})();
// named function
var a;
a = function(){
var x;
return x = 5;
};
a();
// declare named function and execute it
function f(){
var x;
return x = 5;
} f();
由上列可知 do
非常聰明,它能依 anonymous 或是 named Function 決定產生出的 javascript 語法。
而 do
後面跟一個 anonymous 非常方便,很適合使用來將一段程式碼包起來,將變數變成區域變數(local scope variables),好處就是避免變數外漏(expose variables).
do Array
如果 do
後面跟著是 Array , 而 Array 內的元素是可呼叫(callable), 則 do
會執行 Array 內每一個元素。
如:
do [a, b, c]
a(), b(), c();
2. omit parentheses
LiveScript Coding Style 建議我們能省略 parentheses (),就量省略。所以我們可以利用 do
來做到。
implicit object
如:
func do
a: 1
b: 2
會產生
func({
a: 1,
b: 2
});
list
如:
func do
a
b
# 經常使用在 callback, error_callback
func do
(data) ->
x = 1
(err) ->
x = -1
會產生
func(a, b);
// 經常使用在 callback, error_callback
func(function(data){
var x;
return x = 1;
}, function(err){
var x;
return x = -1;
});
3. Backcalls
由於 LiveScript backcalls ,省略了內縮,讓 async callback 程式碼較容易閱讀,也因為省略內縮,如果你某段 code 要在 backcall 後執行就無法做到,這時需要利用 do
。
如官方範例:
do
data <-! $.get 'ajaxtest'
$ '.result' .html data
processed <-! $.get 'ajaxprocess', data
$ '.result' .append processed
alert 'hi'
產生:
$.get('ajaxtest', function(data){
$('.result').html(data);
$.get('ajaxprocess', data, function(processed){
$('.result').append(processed);
});
});
alert('hi');
4. Do while loop
相容 javascript 的 do-while 迴圈語法
如:
i = 0
do
i++
while i<5
產生:
i = 0
do
i++
while i<5
5. code block
沒什麼特別作用,如同你在 javascript 中的 {} . 如:
do
x = 1
x = 2
do
x = 3
產生:
var x;
x = 1;
x = 2;
x = 3;
Written with StackEdit.