Почему такое противопоставление: "функция есть объект - функция"?
Если в ООП языке пишу "переменная типа String", например, то это значит: "объект лежит в куче, а в переменной - ссылка на него.". В JS, получается, так же можно сказать и про функции.
1. Если функция - это объект, то что тогда просто функция? В этом разделении есть какая-то техническая причина (работа со стеком или еще что)? 2. Замыкания - следствие такого решения ("функция есть объект")? |
Здесь вам могут не ответить на такие вопросы(хотя раздел вы выбрали правильно, но здесь обитает меньше старожилов). Попробуйте завтра создать аналогичную тему в разделе Оффтопик
|
Цитата:
Цитата:
|
Цитата:
![]() Если продолжишь так утверждать то тебя ждет частый стук граблями по носу =). На самом деле все немного сложнее. У тебя есть переменная типа String и есть свойства и методы с помощью которых ты можешь работать с этой переменной. А где как и что лежит это уже скрыто за инкапсуляцией и не должно тебя волновать. Цитата:
По этому утверждать что "функция - это объект" в корне неверно. Функция в JS это специальный объект который реализует функтор. "просто функций" не бывает. ИМХО: замыкания, реализация функций, бедный набор базовых типов, странные механизмы приведения типов - это фичи JavaScript и следствие архитектуры хуяк хуяк и в продакшен. JS разрабатывался и реализовывался одним человеком в течении недели =). |
Цитата:
console.log((function(){}) instanceof Object); //true Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
// Было бы верно если бы alert (typeof (function(){}) == "object"); // instanceof работает по тому что функция это прямой наследник объекта alert (typeof (function(){}).prototype == "object"); // но это разные типы по этому поведение у них разное и путать их себе дороже |
http://www.ecma-international.org/ec...tions-function
Цитата:
|
Эээээ
alert (typeof ({}) == "object"); // true как не удивильно но это объект alert (typeof (function(){}) == "object"); // false это не объект это другой тип =) Цитата:
|
Цитата:
Почему typeof выводит для функций отдельное обозначение - хз, возможно, для удобства и обратной совместимости. Цитата:
|
Что в js функции это тоже объекты, кажется, пишут везде. Функции помещаются в стек: параметры, инструкции, возвращаемое значение. При этом есть понятие "функции первого класса". Не зря же их ввели - наверняка что бы не путать с обычными функциями. Тогда где-то тут должна быть разница.
|
Часовой пояс GMT +3, время: 11:56. |