2015-01-11 3 views
0

Само применение CoffeeScriptСамо выполнение CoffeeScript

$ -> 
    alert "Hello CoffeeScript!" 

компилирует

$(function() { 
    return alert("Hello CoffeeScript!"); 
}); 

Теперь, один и тот же код - $ заменен любой другой переменной ->

hello= -> 
    alert "Hello CoffeeScript!" 

Над кодом - Не выполняет сам по себе.

Как присвоить переменную $ включить самостоятельное выполнение (jQuery lib не входит в комплект)? (в JQuery играет роль здесь?)

Я знаю, что вы использовать do иметь функции самостоятельно, ссылающиеся в coffeescript --- это не мой вопрос (пожалуйста, не дублировать его).

новичок -coffeescript

+0

Я предполагаю, что '=' после 'hello' является опечаткой? В противном случае вы * не * просто поменяли «привет» на «$», вы изменили код. –

ответ

3

Код не прямоприменяемых. Это просто дает jQuery ссылку на функцию. Это jQuery, который вызывает эту функцию позже, когда DOM готов (или сразу же, если он уже есть).

in the jQuery documentation.

Как присвоить переменную $ включить самостоятельное выполнение (jQuery lib не входит в комплект)?

Если функция вызывается, JQuery явно это включен (или что-то другое, что определяет функцию и присоединяет его к $ и вызывает функцию вы передаете его).

(в JQuery играет роль здесь?)

Да.


Я знаю, что вы использовать do иметь функции самостоятельно, ссылающегося на CoffeeScript

Если вы имеете в виду сразу -invoked, а не собственного -invoked (общий некорректным) , нет, вы не имеете:

(() -> 
    alert 'Hello!' 
)() 

... который перевод tes to:

(function() { 
    return alert('Hello!'); 
})(); 

... который определяет функцию и вызывает ее немедленно.

Или, если вы действительно имели в виду self -инвуинг (например,Рекурсивное):

(foo = (n) -> 
    alert 'Call ' + n 
    if n > 0 
    foo(n - 1); 
)(10) 

... что переводится как:

var foo; 

(foo = function(n) { 
    alert('Call ' + n); 
    if (n > 1) { 
    return foo(n - 1); 
    } 
})(10); 

... который определяет функцию, которая называет себя 10 раз.

+0

Я пробовал код на complier coffeescript.org, $ (callback) вызывает функцию - тогда у comipler coffeescript.org включен jquery по умолчанию? –

+2

@VivekChandra: Нет, это не компилятор. Компилятор ничего не знает о '$' (а не о jQuery). Он просто компилирует ваш код coffeescript для вызова функции '$'. * Когда это выполняется *, jQuery выполняет свою работу. – Bergi

+0

@bergi Итак, библиотека jQuery присутствует на вкладке tryCoffeescript coffeescript. Понял, спасибо. –

0

Нет, нет ничего особенного в идентификаторе $. Фактическая разница между вашими фрагментами: = после идентификатора - без, он вызывает его с помощью функции в качестве аргумента, при этом функция назначается.

hello -> 
    alert "Hello CoffeeScript!" 
// compiles to: 
hello(function() { 
    return alert("Hello CoffeeScript!"); 
}); 

hello = -> 
    alert "Hello CoffeeScript!" 
// compiles to: 
var hello; 
hello = function() { 
    return alert("Hello CoffeeScript!"); 
}; 

Так что, если ваша hello функция не вызовет заданный обратный вызов (как $ does), ваше выражение функции будут выполнены в первом случае (без назначения).

Обратите внимание, что это не «самоисключение», так как это hello/$, которое вызовет функцию. Для IIFE (который обычно называется «самозапусканием»), вы должны использовать Coffeescripts do keyword.

+0

Довольно уверен, что это опечатка. Но даже с (или без) '=', он не будет ** вызывать ** сам. –

+0

@ T.J.Crowder: Да, я собирался прокомментировать это. +1 к вашему ответу :-) – Bergi

+0

Я пробовал код на complier.org, не уверен, что там включен jquery. Но, привет не звонит сам. –

Смежные вопросы