Функциональные литералы?

HatoL

Профессор
Регистрация
5 Фев 2008
Сообщения
206
Реакции
36
Читаю книгу по JavaScript. Автор Дэвид Флэнаган. До этого знал только HTML, CSS, PHP, MySQL. И что-то я запутался. Для меня концепция PHP например всегда была понятна. А читая эту книгу, не могу понять некоторые вещи. Там написано, что переменная может быть функцией. Это как? Например я могу понять, что результатом функции является допустим литерал и именно этот литерал попадет в переменную. А как в переменную может попасть функция? Это то есть при обращении к этой переменной, каждый раз будет вызываться функция? Непонятная концепция.

Еще написано, что массивы — это объекты. А функции это мол свойство объекта. Зачем такие сложности? Массивы — это массивы. Функции внутри класса — методы. Такое ощущение, что в книге про это написано так, как будто человек уже знаком с этой концепцией языка, хотя почему мне, человеку знакомому с PHP, должна быть понятна эта концепция?

Можно ваших разъяснений? :)
 
В JS все именованное имеет свойства переменных, в том числе функции и объекты, например, нет разницы:

Код:
function myFunc(param) {
}
и

Код:
myFunc = function(param) {
}


Или пример объекта с параметром и методом:

Код:
myObject = {
param: 1,
method: function() {
}
}
 
alert(myObject.param)

Массивы в JS - это объекты, наследованные от класса Array.
То есть
Код:
var myArray = new Array(50);

Строки в JS - это строки, но обладают свойствами объектов, то есть имеют свойства и методы:
Код:
alert("Hello world".length) // 11
alert("Hello world".replace("world","nulled")) // Hello nulled
 
А как в переменную может попасть функция?
Переменная - это ссылка на область памяти, где располагаются данные. Ее тип определяет как нам работать с этими данными и еще некоторые моменты. Функции так же располагаются в памяти рядом с переменными и остальными данными. Соответственно переменная содержит ссылку на область памяти с кодом этой функции, а тип переменной( в данном случае тип - функция) определяет метод работы с этими данными. Образно говоря тип функция позволяет выполнять код, который расположен в памяти по адресу, который хранится в переменной типа "функция". Разница между функцией литералом и обычной в том, что у функции литерала нет имени, а только адрес памяти, который должен хранится в переменной. К простой же функции мы всегда можем обратиться по ее имени.
 
Назад
Сверху