Цитата:
Цитата:
|
Цитата:
|
Большое спасибо, осбоенно Dmitry A. Soshnikov за ответы. Очень подробне и обстоятельные. Буду разбиратся дальше. Я писал много на С++ но JavaScript мне кажется "диким" :) языком после С++. Видимо я не могу пока понять практического смысла столь сложных конструкций. Буду разбиратся. Еще раз сапсибо.
|
Цитата:
Цитата:
Цитата:
|
Riim, в любом случае - в скобках - (...) - может быть только FE.
Цитата:
function initDragMaster() { // private методы и свойства var dragObject function mouseDown(e) { клик на переносимом элементе: начать перенос } function mouseMove(e){ if (dragObject) { отобразить перенос объекта } } function mouseUp(e){ if (dragObject) { конец переноса } } // public методы и свойства return { init: function() { // инициализовать контроллер document.onmousemove = mouseMove document.onmouseup = mouseUp }, makeDraggable: function(element){ // сделать элемент переносимым element.onmousedown = mouseDown } } } var dragMaster = initDragMaster(); Здесь есть основной минус - функция initDragMaster остаётся жить в глобальном пространстве, даже, когда она уже не нужна. Поэтому, обычно, для создания инициализующего скопа, и создают (анонимную) FE, которая выполнится сразу после создания и уничтожится (тем не менее, весь её внутренний контекст будет доступен в возвращённом объекте; но это уже тема про замыкания). Цитата:
|
Ну да - JavaScript кажется мне именно странным. Это очень точный термин. Из за очень большой свободы JavaScript кажется мне очень трудночитаемым языком в плане синтаксиса. Когда я первый раз увидел вложенные функции, обращения к переменным до их объявления, констрекции типа
var v= function() ... , добавление свойств и методов "по ходу дела" ну и еще ряд мелочей у меня волосы встали дыбом :) Надо конечно все это еще исследовать сильно. Я просто не понимаю зачем для веб програмирования, которое является чисто прикладной задачей был выбран такой сложный стандарт. Также и для АкшнСкрипт. Сделал на нем небольшой проект с нуля - измучился совершенно. По идее для таких задач должны были использоватся очень простые языки, что бы любой офисный работник мог бы освоить скажем типа ВизуалБейсик. Там все прямолинейно, логично, быстро и относительно безглючно. А тонкие ньюансы и навороченные фишки приводят имхо к сильнопутанному синтаксису и соответственно глюкам и трудноуловимым багам. Впрочем это мои первые и чисто субъективные впечатления. |
Цитата:
|
Цитата:
http://javascript.ru/ecma/part11#a-11.1.6 В скобках - уже expression. Всегда expression. Касательно функции, - FE. |
Цитата:
|
Цитата:
Касательно же функций (и изначального вопроса) - не обязательно функцию оборачивать в скобки, чтобы иметь возможность запустить. Например, здесь нет никаких скобок, но функция запускается: var a = { b: function () { return 10; }() }; alert(a.b); // 10 Почему? Потому что парсер уже распознал функцию как FE. В случае же описания в начале темы - есть неоднозначность - путаница с FD, поэтому парсер выдаёт ошибку. Когда же мы помещаем её в оператор группировки, внутренности которого всегда являются expression'ом (а что ещё, по Вашему, там может быть? ;)), парсер однозначно определят функцию, как FE, и выполняет. |
Часовой пояс GMT +3, время: 22:55. |