Функция — тип данных
Определяют функцию при помощи ключевого слова function:
function f_name(arg1,arg2,...) { /* function body */ }
Здесь следует обратить внимание на следующие моменты. Во-первых, function определяет переменную f_name. Эта переменная имеет тип "function":
document.write("Тип переменной f_name:"+ typeof(f_name));
Тип переменной f_name: function. Во-вторых, этой переменной присваивается значение:
document.write("Значение i:"+i.valueOf()); document.write("Значение f_name:"+ f_name.valueOf());
Значение переменной f_name: 10. Значение переменной f_name:function f_name(a) { if(a>=0) return true; else return false; }. В данном случае метод valueOf() применяется как к числовой переменной i, так и к f_name. По этой причине функции можно назначить синоним путем присваивания ее значения другой переменной:
function f_name(a) { if(a>=0) return true; else return false; } document.write("Значение переменной f_name:"+ f_name(1)+""); b = f_name; document.write("Значение переменной b:"+ b(1)+""); Значение переменной f_name:true Значение переменной b:true
Очевидно, что если функцию можно присвоить переменной, то ее можно передать и в качестве аргумента другой функции. Все это усиливается при использовании функции eval(), которая позволяет реализовать отложенное исполнение JavaScript-кода. Отложенное исполнение — это возможность изменения программы по ходу ее исполнения. Типичным использованием eval() является сокращение кода за счет генерации однотипных строк:
for(i=0;i<5;i++) { eval("document.write('test"+i+"<br>')"); }
Результат исполнения кода:
test0 test1 test2 test3 test4
При непосредственном кодировании пришлось бы написать пять строк кода. Данный подход использовался в разделе "Изменение картинки" для инициирования массивов картинок, имена которых построены по принципу индексации ячеек таблицы.