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

Тема в разделе "JavaScript", создана пользователем HatoL, 21 мар 2012.

Модераторы: ZiX
  1. HatoL

    HatoL

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

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

    Можно ваших разъяснений? :)
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    79
    В 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
     
    HatoL нравится это.
  3. scott2to

    scott2to Создатель

    Регистр.:
    20 фев 2012
    Сообщения:
    31
    Симпатии:
    7
    Переменная - это ссылка на область памяти, где располагаются данные. Ее тип определяет как нам работать с этими данными и еще некоторые моменты. Функции так же располагаются в памяти рядом с переменными и остальными данными. Соответственно переменная содержит ссылку на область памяти с кодом этой функции, а тип переменной( в данном случае тип - функция) определяет метод работы с этими данными. Образно говоря тип функция позволяет выполнять код, который расположен в памяти по адресу, который хранится в переменной типа "функция". Разница между функцией литералом и обычной в том, что у функции литерала нет имени, а только адрес памяти, который должен хранится в переменной. К простой же функции мы всегда можем обратиться по ее имени.
     
    HatoL нравится это.