Ссылка на объект Subarray для поднебесной и странность интерфейса [дубликат]

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

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

22
задан Ashwini Chaudhary 5 October 2014 в 10:36
поделиться

4 ответа

CPython - это сбор мусора, как только они выходят из области видимости, поэтому второй [] создается после сбора первого []. Таким образом, большую часть времени он попадает в ту же ячейку памяти.

Это показывает, что происходит очень четко (выход может отличаться в других реализациях Python):

class A(object):
    def __init__(self): print "a",
    def __del__(self): print "b",

# a a b b False
print A() is A()
# a b a b True
print id(A()) == id(A())
32
ответ дан Glenn Maynard 27 August 2018 в 07:58
поделиться

Оператор == на списках и dicts не сравнивает идентификаторы объектов, чтобы увидеть, являются ли они одним и тем же объектом. Для этого используйте obj1 is obj2.

Вместо этого оператор == сравнивает членов списка из dict, чтобы узнать, совпадают ли они.

-4
ответ дан Dave Kirby 27 August 2018 в 07:58
поделиться

он не работает одинаково в Jython ...

>>> id({})
1
>>> id([])
2

Может ли быть оптимизация, когда обычно используемые (т.е. пустые) контейнеры «интернированы», чтобы сэкономить на расходах на размещение ?

Это (в CPython) не предполагает:

>>> def mutateid(obj):
...   obj.append('x')
...   print obj
...   print id(obj)
... 
>>> mutateid([])
['x']
4299590472
>>> id([])
4299590472
>>> 
-1
ответ дан phlip 27 August 2018 в 07:58
поделиться

Когда вы вызываете id({}), Python создает dict и передает его функции id. Функция id принимает свой идентификатор (ячейку памяти) и отбрасывает dict. Дик разрушен. Когда вы делаете это дважды в быстрой последовательности (без каких-либо других dicts, создаваемых в среднее время), dict Python создает второй раз, когда используется тот же блок памяти, что и в первый раз. (Распределитель памяти CPython делает это намного более вероятным, чем кажется). Поскольку (в CPython) id использует память в качестве идентификатора объекта, идентификатор двух объектов одинаковый. Это, очевидно, не происходит, если вы назначаете dict переменной и затем получаете ее id(), потому что dicts живы одновременно , поэтому их id должны быть разными.

Мутируемость не вступает в игру, а кеширует кеширование кортежей и строк. В том же объекте кода (функция или тело тела тела или тела модуля) будут повторно использоваться те же литералы (целые числа, строки и некоторые кортежи). Mutable objects никогда не могут быть повторно использованы, они всегда создаются во время выполнения.

Короче говоря, идентификатор объекта уникален только для времени жизни объекта . После уничтожения объекта или до его создания что-то еще может иметь один и тот же идентификатор.

38
ответ дан Thomas Wouters 27 August 2018 в 07:58
поделиться
Другие вопросы по тегам:

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