2013-05-29 2 views
2

я преобразовал свой код CoffeeScript на JavaScript с использованием http://js2coffee.orgфункция Javascript присваивается переменной с вар

ResetControls = -> 
    $("#menu_item_url").val "" 
    $("#menu_item_name").val "" 
    $("#resource_id").prop "selectedIndex", 0 
    $("#resource_type_id").prop "selectedIndex", 0 

Он преобразовал его:

var ResetControls; 

ResetControls = function() { 
    $("#menu_item_url").val(""); 
    $("#menu_item_name").val(""); 
    $("#resource_id").prop("selectedIndex", 0); 
    return $("#resource_type_id").prop("selectedIndex", 0); 
}; 

Первая строка в преобразованном коде JavaScript предполагает, что некоторые его как правило, ставить ключевое слово var перед именем переменной при назначении функции переменной. Это так? Как?

В моем понимании, var подходит для рекурсивных вызовов, где ваше намерение состоит в том, чтобы сделать копии переменных внутри рекурсивной функции (иначе они будут разделены или останутся статическими между рекурсивными вызовами).

Есть ли другое значение var?

+0

Когда машина выполняет перевод с одного языка на другой, вы действительно не можете принимать то, что оно выводит, как «лучшая практика». Это может быть *, или может быть просто, что он учитывает особую ситуацию, в которой этот код не касается. – JJJ

+0

http://stackoverflow.com/questions/1470488/difference-between-using-var-and-not-using-var-in-javascript –

+0

Если мы напишем var перед переменной внутри функции, это будет локальная переменная. Если мы не будем писать переменную var внутри переменной, она будет глобальной. Обычно глобальные vaiable не являются предпочтительными. Таким образом, var используется в javascript. Я не знаю о js2coffee –

ответ

5

Да, вы должны поставить var перед именем переменной. Таким образом, вы объявляете переменную в текущей области - в противном случае JS будет искать ее во внешних областях и, если она не объявлена ​​в какой-либо области, сделает ее глобальной. Насколько мне известно, в режиме strict даже глобальные переменные должны быть объявлены с var в глобальном пространстве.

P.S. Это справедливо для всех переменных, а не только для тех, которые вы назначаете функции

+2

Просто подчеркнуть: * Каждая переменная * должна иметь ключевое слово 'var', а не только когда они содержат функции. –

1

И еще одна причина - сбор мусора. Любая переменная, созданная без ключевого слова var, создается в глобальной области действия и никогда не имеет права на сбор мусора, что дает возможность утечки памяти.

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