2012-08-08 11 views
11

Mã CoffeeScript sau:CoffeeScript làm, vượt qua lập luận

do (a) -> 
    console.log a 

tạo này:

(function(a) { 
    return console.log(a); 
})(a); 

Làm thế nào để vượt qua một giá trị cho một như thế này?

(function(a) { 
    return console.log(a); 
})("hello"); 

Trả lời

20
do (a = 'hello') -> 
    console.log a 

Will generate chính xác những gì bạn muốn.

Mặc dù, tôi phải thừa nhận rằng tôi không thể nhìn thấy điểm làm việc đó. Nếu bạn thực sự muốn a để lấy giá trị bằng chữ 'hello' bên trong phạm vi đó, thì tại sao lại tạo một phạm vi khác? Với a là một biến bình thường được khai báo là a = 'hello' sẽ là đủ. Bây giờ, nếu bạn muốn thay thế a bằng giá trị của biến khác (có thể thay đổi theo vòng lặp hoặc thứ gì đó) và làm do (a = b) -> thì tôi nghĩ điều đó có ý nghĩa hơn, nhưng bạn có thể làm đơn giản do (a) -> và chỉ sử dụng a thay vì b bên trong do phạm vi.

+9

'do ($ = jQuery) ->' là trường hợp sử dụng commom –

+0

tốt để sử dụng vòng lặp bên trong tạo nhiều đóng, sao cho mỗi vòng lặp lặp lại (mỗi đóng) có biến riêng. –

2

do là từ khóa đặc biệt trong CoffeeScript. Nó tạo ra một đóng cửa. Tôi nghĩ rằng bạn muốn một cái gì đó như thế này:

log = (msg) -> 
    console.log msg 

Biên dịch để:

var log; 

log = function(msg) { 
    return console.log(msg); 
}; 

Sử dụng nó như bất kỳ chức năng khác: log("hello")

2

bạn có thể làm điều này

do (a = "foo")-> 
    console.log a 

Nhưng thực sự tại sao bạn nên làm việc này? gì là trường hợp sử dụng đầy đủ hơn bạn đang cố gắng để thực hiện

+2

Hoàn toàn là hiểu CoffeeScript tốt hơn. Cảm ơn câu trả lời! – chenglou

3

Nếu bạn đang sử dụng Module Pattern, điều này rất hữu ích để sử dụng $ toàn cầu khi sử dụng nhiều thư viện Javascript có thể xung đột với nhau:

mySingleton = do ($ = jQuery) -> 
    colorIt -> $('.colorme').css('backgroundColor', 'red') 

mySingleton.colorIt()