Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.07.2012, 07:42
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Дзен-трансгуманист
Тогда уж так:
и в чем тут разница? что-то понять не могу
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #12 (permalink)  
Старый 25.07.2012, 16:08
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от devote
и в чем тут разница? что-то понять не могу
очередная особенность FF
Ответить с цитированием
  #13 (permalink)  
Старый 25.07.2012, 16:14
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от bes
очередная особенность FF
Спецификация ECMAScript запрещает использование объявлений функций внутри блоков, в том числе switch, if, try и др. Все объявления функции должны находиться непосредственно в коде верхнего уровня, коде функции или коде eval.
Поэтому оба кода, приведенные выше, являются невалидными, хотя браузер не выдаёт ошибку.
Ответить с цитированием
  #14 (permalink)  
Старый 25.07.2012, 16:26
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от oneguy
Поэтому оба кода, приведенные выше, являются невалидными, хотя браузер не выдаёт ошибку.
И более того - исполняет (кроме FF в первом примере)
Ответить с цитированием
  #15 (permalink)  
Старый 25.07.2012, 16:30
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

oneguy,
ты какую там спецификацию то смотришь родной? а то прям любишь тыкать на нее, да вот аргументов нет.. Читай внимательно спецификацию, что бы дураком перед другими не казаться:
"use strict";
try {
  var i = 0;
  function a () { i++; a(); }
  a();
}
catch (e) {
  alert('ваш ёбаный стек равен каким-то сраным: '+i+' вызовам');
}
спецификация запрещает это делать в строгом режиме
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #16 (permalink)  
Старый 25.07.2012, 16:39
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Да, сейчас я аргументирую своё утверждение с помощью спецификации.
Спецификация запрещает объявлять функции внутри блоков в любом режиме, не только строгом.
http://es5.javascript.ru/x12.html#x12 - здесь приведен список возможностей для Statement и в нём нет FunctionDeclaration.
Там же приводится замечание, касающееся нашей темы.
Цитата:
ПРИМЕЧАНИЕ Известно, что несколько широко распространённых реализаций языка ECMAScript поддерживают использование FunctionDeclaration Объявление функции в качестве инструкции. Однако в семантике, применимой к таким объявлениям функций, имеются существенные противоречивые вариации реализаций. Из-за этих противоречий код, написанный с использованием FunctionDeclaration в качестве Statement, не является надёжным при переносе из одной реализации в другую. Поэтому для реализаций ECMAScript рекомендуется либо отключать использование FunctionDeclaration, либо генерировать предупреждение в случае такого использования. Возможно, в последующих версиях языка ECMAScript появятся альтернативные средства для переноса кода, позволяющие объявлять функции в контексте Statement.
Ответить с цитированием
  #17 (permalink)  
Старый 25.07.2012, 16:40
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Maxmaxmахimus,
Тогда уж так:
try {
  var i = 0;
  function a () { i++; a(); }
  a();
}
catch (e) {
  alert('ваш ёбаный стек равен каким-то сраным: '+i+' вызовам');
}
А то в твоем варианте получается 0.
Ваш код загрузил мой Firefox 11 так, что он завис.
Код:
Похоже, исполняемый на этой странице сценарий занят или не отвечает. Вы можете остановить его сейчас или продолжить и посмотреть, сможет ли он завершить свою работу.

Сценарий: resource://firebug/firebug-service.js:3253
Ответить с цитированием
  #18 (permalink)  
Старый 25.07.2012, 16:42
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

devote, я считаю, что у oneguy правильный подход, куда ещё тыкаться как не в спецификацию, только надо ссылку кидать, где в спецификации эта информация (спецификация-то большая).
Ответить с цитированием
  #19 (permalink)  
Старый 25.07.2012, 16:44
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

oneguy,
а может стоит читать официальные документы а не чейто перевод? я понимаю что Илья переводил, и все такое. Но английский это язык который каждый понимает по своему. И читать, а темболее утверждать надо по официальным документам а не по тем что кем-то переведены не официально.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #20 (permalink)  
Старый 25.07.2012, 16:44
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от bes
только надо ссылку кидать, где в спецификации эта информация (спецификация-то большая).
ссылку надо кидать на оригинал
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Книга] Stoyan Stefanov, Javascript Patterns Dmitry A. Soshnikov Учебные материалы 20 13.08.2013 11:37
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34