Ответ 1
Объект JavaScript - это сопоставление между ключами и значениями. Ключи строки и значения могут быть любыми. Это делает объекты естественными для хэшмапов.
Функции - это обычные объекты с дополнительной способностью быть отозваны.
Это означает, что вы можете делать такие вещи, как:
function test(){
console.log(1);
}
var a = test;
a();
или
var test2 = function(){
console.log(2);
}
или autocall
//sorry for the indentation.
(
function(){
console.log(3);
}
)()
Или создать структуры
var testHash = {
a : 1,
b : function(){
console.log(4);
}
}
testHash.b();
testHash['b']();
И создать функцию, которую трудно вызвать:
//in a browser environment
window['test3'] = function(){
console.log(5);
}
window['test space'] = function(){
console.log(6);
}
test3() //no error
test space() //error :D
EDIT: Пользователь хочет узнать больше о функциях автозапуска:
Почему эта работа?
(
function(){
console.log(3);
}
)()
Легко следовать в 2 этапа:
Скобка, если мы знаем, что функция похожа на другие переменные, и мы знаем, что скобки предназначены только для сделанных групп или функций вызова.
var test_1 = 'string example';
var length = (test_1).length; // the same that test_1.length
Имеет смысл в:
var test_1 = 'string';
var test_2 = ' example';
var length = (test_1 + test_2).length; // the same that test_1.length
вместо:
var test_1 = 'string';
var test_2 = ' example';
var aux = test_1 + test_2;
var length = aux.length; // the same that test_1.length
Теперь, это имеет смысл для вас?:
var length = ('string example').length; // instead the first example
Второй шаг, мы можем изменить строку для функции.. и называть ее
( function(){ ... } )()
почему это интересно? Ну, теперь появилась концепция закрытия.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
Закрытие является очень важным инструментом в javascript.