Страницы

Поиск по вопросам

воскресенье, 21 октября 2018 г.

javascript, замыкания, проблемы синтаксиса

Есть код на JavaScript:
"use strict";
var site = (function () { var loader_html = ''; var loader_image_width = 100; var loader_image_height = 100;
return { window_subroutines : { get_scrollTop : function () { return (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop); }, get_scrollLeft : function () { return (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft); }, get_clientWidth : function () { return (document.documentElement && document.documentElement.clientWidth) || (document.body && document.body.clientWidth); }, get_clientHeight : function () { return (document.documentElement && document.documentElement.clientHeight) || (document.body && document.body.clientHeight); } },
loader : { show : function () { var loader_elem = document.getElementById ("loader_container"); var left_coord = Math.round(site.window_subroutines.get_scrollLeft() + ( site.window_subroutines.get_clientWidth() / 2 ) - ( loader_image_width / 2 )) + "px"; var top_coord = Math.round(site.window_subroutines.get_scrollTop() + ( site.window_subroutines.get_clientHeight() / 2 ) - ( loader_image_height / 2 )) + "px";
loader_elem.innerHTML = loader_html; loader_elem.style.top = top_coord; loader_elem.style.left = left_coord;
loader_elem.style.display = "block"; },
hide : function () { setTimeout("document.getElementById('loader_container').style.display = 'none';", 750); } } };
})();
Проблема в том, что при попытке его выполнить браузер выводит ошибку:
SyntaxError: function statement requires a name get_scrollTop : function () { return (document.documentElement && document.docum...
Посмотреть живьём это можно на jsfiddle


Ответ

Надо изменить
return {
на
return {
JavaScript добавляет в конец строка автоматическим образом, так что код распарсится так:
return; { // блок кода window_subroutines: // метка { // блок кода get_scrollTop : // метка function () { /* ... */ } // SyntaxError: декларация функции без имени
(Смотрите в спецификации о инструкциях с метками и автоматической подстановке точки с запятой)

Комментариев нет:

Отправить комментарий