создайте вложенные объекты в JavaScript как groupby в C#

Простая причина, по которой это не работает, не в том, что ; указывает на конец анонимной функции. Это потому, что без () в конце вызова функции, это не вызов функции. То есть

function help() {return true;}

Если вы вызываете result = help();, это вызов функции и она возвращает true.

Если вы звоните result = help;, это не звонок. Это задание, в котором помощь рассматривается как данные, которые должны быть присвоены результату.

То, что вы сделали, объявили / создали экземпляр анонимной функции, добавив точку с запятой,

(function (msg) { /* Code here */ });

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

('SO');

Интерпретатор видит круглые скобки во второй строке как новую инструкцию / инструкцию, и поэтому он не работает, даже если вы сделали это так:

(function (msg){/*code here*/});('SO');

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

(function (msg){/*code here*/})        // This space is ignored by the interpreter
('SO');

Вывод: вызов функции не является вызовом функции без конца () в конце, если только при определенных условиях, например, при вызове другой функции, то есть onload = 'help' не выполнит функцию справки даже хотя скобки не были включены. Я полагаю, что setTimeout и setInterval также разрешают этот тип вызова функции, и я также считаю, что интерпретатор в любом случае добавляет скобки за кулисы, что возвращает нас к «вызову функции не является вызовом функции без скобок».

5
задан Schotime 26 June 2009 в 15:32
поделиться

1 ответ

Да.

В JavaScript можно передавать функции, которые будут служить той же цели, что и лямбда-выражения в коде C #. В качестве примера возьмем "каждый" JQuery:

$('div.several').each(function() { 
  // Do something with the current div.
});

Вы также можете довольно легко создавать вложенные объекты:

var outer = {
    inner1: {
        val1: 'a',
        val2: 'b'
    },
    inner2: {
        val1: 'c',
        val2: 'd'
    }
};

Конечно, вы можете делать это динамически, а не все сразу:

var outer = {};
outer.inner1 = {};
outer.inner1.val1 = 'a';
...

Затем, чтобы сделать то, что вы ищете, вам нужно будет использовать массивы:

var result = [];
for (var i=0; i<x; ++i) {
  result[result.length] = GetIndividualResult(i);
}
2
ответ дан 18 December 2019 в 08:30
поделиться
Другие вопросы по тегам:

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