Làm thế nào để viết điều này trong coffeescript?
f = (function(){
// something
})();
Cảm ơn vì bất kỳ mẹo nào :)
Làm thế nào để viết điều này trong coffeescript?
f = (function(){
// something
})();
Cảm ơn vì bất kỳ mẹo nào :)
Câu trả lời:
Mặc dù bạn chỉ có thể sử dụng dấu ngoặc đơn (ví dụ: (-> foo)()bạn có thể tránh chúng bằng cách sử dụng dotừ khóa:
do f = -> console.log 'this runs right away'
Việc sử dụng phổ biến nhất dolà bắt các biến trong một vòng lặp. Ví dụ,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Nếu không có do, bạn chỉ in giá trị của xsau vòng lặp 3 lần.
-> console.log 'this runs right away'tới f, sau đó chạy nó; của bạn chạy hàm và sau đó gán kết quả của nó cho f, như trong câu hỏi ban đầu. (Mặc dù trong trường hợp console.log, giá trị trả về luôn là undefinedanyway.)
{f: do -> // something}
docũng cho phép bạn chuyển các đối số cho hàm. Để chuyển 1và 2dưới dạng các tham số xvà y, viết do (x = 1, y = 2) ->. (Tài liệu về tính năng này đã bị mất , nhưng vấn đề nơi tính năng được giới thiệu có một số ví dụ.)
Nếu bạn muốn "bí danh" các đối số được truyền cho hàm tự gọi trong CoffeeScript và giả sử đây là những gì bạn đang cố gắng đạt được:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Sau đó do (window, document) ->sẽ không cho phép bạn làm điều đó. Cách để đi là với parens sau đó:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Bạn cũng có thể kết hợp dotừ khóa với các tham số hàm mặc định để gieo "các hàm tự khởi tạo" đệ quy với giá trị ban đầu. Thí dụ:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
thử sử dụng
do ($ = jQuery) ->
do ->
#your stuff here
Điều này sẽ tạo ra một bao đóng tự thực thi, rất hữu ích cho việc xác định phạm vi.
Xin lỗi, tôi đã giải quyết nó:
f = (
() -> "something"
)()
dotừ khóa có một số hạn chế mà làm cho nó cần thiết để sử dụng phương pháp JS-phong cách đôi khi (xem vấn đề 960 ); dothực sự chỉ được thêm vào vì trường hợp sử dụng loop-with-close.
Nó nên được
f = () ->
# do something
f = do -> console.log x