Порядок выполнения кода ECMAScript [дубликат]

Вот некоторые подходы к работе с асинхронными запросами:
  1. Объект обезьяны браузера
  2. Q - A
  3. A + Promises.js
  4. jQuery отложен
  5. API XMLHttpRequest
  6. Использование концепции обратного вызова - как реализация в первом ответе

Пример: jQuery отложенная реализация для работы с несколькими запросами

var App = App || {};

App = {
    getDataFromServer: function(){

      var self = this,
                 deferred = $.Deferred(),
                 requests = [];

      requests.push($.getJSON('request/ajax/url/1'));
      requests.push($.getJSON('request/ajax/url/2'));

      $.when.apply(jQuery, requests).done(function(xhrResponse) {
        return deferred.resolve(xhrResponse.result);
      });
      return deferred;
    },

    init: function(){

        this.getDataFromServer().done(_.bind(function(resp1, resp2) {

           // Do the operations which you wanted to do when you
           // get a response from Ajax, for example, log response.
        }, this));
    }
};
App.init();
12
задан jdw 24 April 2013 в 20:17
поделиться

5 ответов

Стандарт ECMA-262 (5.1) - Раздел 11.1.5 - Инициализатор объектов

Производственный PropertyNameAndValueList: PropertyNameAndValueList, PropertyAssignment оценивается следующим образом:

1. Let obj be the result of evaluating PropertyNameAndValueList.
2. Let propId be the result of evaluating PropertyAssignment.
...
5. Call the [[DefineOwnProperty]] internal method of obj with arguments propId.name, propId.descriptor, and false.
6. Return obj.

Так что да, порядок соблюдается стандартом.

12
ответ дан Karoly Horvath 28 August 2018 в 14:20
поделиться

У меня нет официального источника для цитаты, но давайте просто используем немного здравого смысла.

Что делать, если назначение не было сделано по порядку? Вы никогда не узнаете, какое значение будет присвоено какому свойству, что делает структуру объекта бесполезной (по крайней мере, при использовании синтаксиса литерала объекта) .

Не имеет значения, вызов функции или примитивный литерал или другое значение. Если бы это не было гарантировано, это просто не сработало.


После быстрого поиска термина left to right в ECMAScript 5 вот некоторые результаты, если это вам поможет:

7 Лексические условные обозначения

Исходный текст программы ECMAScript сначала преобразуется в последовательность входных элементов, которые являются токенами, терминаторами строк, комментариями или пробелами. Исходный текст сканируется слева направо, повторяя при этом как можно более длинную последовательность символов в качестве следующего входного элемента.

11.8.5. Алгоритм абстрактного реляционного сравнения

... необходимо, потому что ECMAScript указывает левую на правую оценку выражений.

Приложение D (информативное) Исправления и разъяснения в 5-м издании с возможным воздействием на совместимость с 3-м выпуском

ECMAScript обычно использует правильный порядок оценки, однако язык спецификации версии 3 для операторов> и & lt; = привел к частичному праву налево. Спецификация была исправлена ​​для этих операторов, так что теперь она указывает полный порядок оценки слева направо.

0
ответ дан grasp 28 August 2018 в 14:20
поделиться

Да, вам гарантировано, что a будет 1, b будет равно 2 и т. д. Каждый f() будет интерпретироваться в том порядке, в котором вы их написали.

0
ответ дан mchail 28 August 2018 в 14:20
поделиться

Назначение всегда в порядке. Это просто способ обнаружения, интерпретации и выполнения кода.

0
ответ дан Roel van Uden 28 August 2018 в 14:20
поделиться

Из вики-страницы ECMAScript 6, которая будет определять новую версию JS:

Когда вводится область (Block, FunctionBody, Program, ModuleBody и т. д.), переменные, объявленные все незамедлительно содержащиеся объявления функций и классов привязаны к их соответствующим функциям и классам. Затем все тела классов выполняются в текстовом порядке. Тело класса определяет и инициализирует свойства класса один раз, когда оценивается определение класса. Сюда входят свойства функции-конструктора (самого класса) и свойства его прототипа. Эти инициализации происходят в текстовом порядке.

Ваш источник пришел! Свойства объекта JavaScript инициализируются в текстовом порядке для объектов . Массивы не всегда (в настоящее время) всегда следуют этому правилу.

Источник: http://wiki.ecmascript.org/doku.php?id=harmony:classes

Я отредактирую этот пост, когда найду ссылку в ECMAScript 5, хотя я уверен, что он есть.

Изменить: Найден

ECMAScript 5 имеет: http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.7 .

Если реализация определяет определенный порядок перечисления для оператора for-in, этот порядок перечисления должен использоваться для упорядочения элементов списка на шаге 3 этого алгоритма.

< / blockquote>

Это определяет вызовы на DefineOwnProperty и, следовательно, положение свойств во внутренней таблице.

1
ответ дан Sébastien Renauld 28 August 2018 в 14:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: