Страницы

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

суббота, 14 декабря 2019 г.

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

#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
    


Ответы

Ответ 1



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

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

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