Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2015, 16:59
Новичок на форуме
Отправить личное сообщение для nevro Посмотреть профиль Найти все сообщения от nevro
 
Регистрация: 03.04.2015
Сообщений: 5

Почему такое противопоставление: "функция есть объект - функция"?
Если в ООП языке пишу "переменная типа String", например, то это значит: "объект лежит в куче, а в переменной - ссылка на него.". В JS, получается, так же можно сказать и про функции.
1. Если функция - это объект, то что тогда просто функция? В этом разделении есть какая-то техническая причина (работа со стеком или еще что)?
2. Замыкания - следствие такого решения ("функция есть объект")?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2015, 21:05
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Здесь вам могут не ответить на такие вопросы(хотя раздел вы выбрали правильно, но здесь обитает меньше старожилов). Попробуйте завтра создать аналогичную тему в разделе Оффтопик
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2015, 23:37
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Сообщение от EmperioAf Посмотреть сообщение
Здесь вам могут не ответить на такие вопросы(хотя раздел вы выбрали правильно, но здесь обитает меньше старожилов).
"Старожилы" смотрят не только Оффопик, но и "Новые сообщения" тоже и выбирают интересные для них темы, как и любые другие пользователи.

Сообщение от EmperioAf Посмотреть сообщение
Попробуйте завтра создать аналогичную тему в разделе Оффтопик
Попробуй не давать вредных советов новичкам.
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2015, 00:57
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от nevro
Если в ООП языке пишу "переменная типа String", например, то это значит: "объект лежит в куче, а в переменной - ссылка на него."

Если продолжишь так утверждать то тебя ждет частый стук граблями по носу =).
На самом деле все немного сложнее. У тебя есть переменная типа String и есть свойства и методы с помощью которых ты можешь работать с этой переменной. А где как и что лежит это уже скрыто за инкапсуляцией и не должно тебя волновать.

Сообщение от nevro
Если функция - это объект, то что тогда просто функция?
Объект и функция это разные типы данных(переменных) в JavaScript.
По этому утверждать что "функция - это объект" в корне неверно.
Функция в JS это специальный объект который реализует функтор.
"просто функций" не бывает.

ИМХО: замыкания, реализация функций, бедный набор базовых типов, странные механизмы приведения типов - это фичи JavaScript и следствие архитектуры хуяк хуяк и в продакшен.
JS разрабатывался и реализовывался одним человеком в течении недели =).
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2015, 06:40
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
По этому утверждать что "функция - это объект" в корне неверно.
Верно.
console.log((function(){}) instanceof Object); //true


Цитата:
Функция в JS это специальный объект который реализует функтор.
"просто функций" не бывает.
Аха.

Цитата:
замыкания, реализация функций, бедный набор базовых типов
А что там не так?

Цитата:
странные механизмы приведения типов
Да, всегда раздражало(

Цитата:
JS разрабатывался и реализовывался одним человеком в течении недели =)
И развивался десятками членов TC39 с фидбеком тысяч программистов в течение 20 лет)
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2015, 10:50
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от Erolast
Верно.

1. console.log((function(){}) instanceof Object); //true
// Было бы верно если бы 
 alert (typeof (function(){}) == "object");
// instanceof работает по тому что функция это прямой наследник объекта
alert (typeof (function(){}).prototype == "object");

// но это разные типы по этому поведение у них разное и путать их себе дороже
Ответить с цитированием
  #7 (permalink)  
Старый 24.08.2015, 15:49
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

http://www.ecma-international.org/ec...tions-function
Сообщение от спецификация
function
member of the Object type that may be invoked as a subroutine
Ответить с цитированием
  #8 (permalink)  
Старый 24.08.2015, 16:44
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Эээээ

alert (typeof ({}) == "object"); // true как не удивильно но это объект
alert (typeof (function(){}) == "object"); // false это не объект это другой тип =)


Сообщение от Erolast
И развивался десятками членов TC39 с фидбеком тысяч программистов в течение 20 лет)
Первые пять лет чесали затылок и разбирать по чему это работает так а не этак. Потом пару лет писали не противоречивую спецификацию. Много о чем спорили много чего планировали но так практически ничего пока не поменяли. Именно по этому 99% современного кода будет работать на первых реализациях JS

Последний раз редактировалось MallSerg, 24.08.2015 в 16:57.
Ответить с цитированием
  #9 (permalink)  
Старый 24.08.2015, 17:32
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
alert (typeof ({}) == "object"); // true как не удивильно но это объект
alert (typeof (function(){}) == "object"); // false это не объект это другой тип =)
Да ну? Ты споришь со спецификацией?) Я же тебе ссылку дал - не веришь, пойди проверь, ну же.
Почему typeof выводит для функций отдельное обозначение - хз, возможно, для удобства и обратной совместимости.

Цитата:
Первые пять лет чесали затылок и разбирать по чему это работает так а не этак. Потом пару лет писали не противоречивую спецификацию. Много о чем спорили много чего планировали но так практически ничего пока не поменяли. Именно по этому 99% современного кода будет работать на первых реализациях JS
Вот тебе предельно простой современный код (мой обыденный от него только отсутствием проксей отличается). Запустишь в IE3? Ну ладно, хотя бы в IE10).

Последний раз редактировалось Erolast, 24.08.2015 в 17:35.
Ответить с цитированием
  #10 (permalink)  
Старый 07.09.2015, 20:20
Новичок на форуме
Отправить личное сообщение для nevro Посмотреть профиль Найти все сообщения от nevro
 
Регистрация: 03.04.2015
Сообщений: 5

Что в js функции это тоже объекты, кажется, пишут везде. Функции помещаются в стек: параметры, инструкции, возвращаемое значение. При этом есть понятие "функции первого класса". Не зря же их ввели - наверняка что бы не путать с обычными функциями. Тогда где-то тут должна быть разница.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть ли такое Условие ! ArsenInvoker Элементы интерфейса 24 26.03.2015 19:50
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Есть у кого такое меню? sandelua Элементы интерфейса 3 24.09.2011 21:31
в JavaScript есть сообщение такое же как alert? SergAG Элементы интерфейса 5 05.06.2011 12:07
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37