Приоритет выполнения в коде

108
04 апреля 2021, 08:30

При создании объекта одному из свойств можно приписать вызов функции. Например:

function test() {
    console.log('tester')
}
var obj = {
    a: 10,
    b: test() 
}

По идее, присваивается результат функции. Вроде так и есть. Но по факту, даже без вызова (просто при наличии подобной функции у объекта), это свойство объекта самовызывается.

Как вариант - скорее всего, потому что в функции присутствует console.log, который и вызывает себя. Но вот должен ли он это делать при объявлении объекта?

Так же как и:

var testA = console.log( 1 )
var testB = function(value) {
  console.log( value )
} 
var testC = testB(3)
testB(2)

Тут тоже - вроде по приоритету вызов функции должен быть первым. Но по факту - сначала вызывается (при присвоении переменной - должно быть в последнюю очередь), testA, потом testB, а уже потом сам вызов функции testB(2)

Вроде же в приоритете должно быть выполнение функции, а только лишь потом присвоение. ЧЯДНТ?

Answer 1

При создании объекта подобным образом:

var obj = {
    b: test()
}

в obj.b попадает результат выполнения функции test (undefined), то есть функция test выполняется в момент создания объекта

Если функция должна вызываться позже в виде obj.b(), то в b нужно помещать не результат выполнения, а ссылку на функцию:

var obj = {
    b: test
}

Во втором примере в testA присваивается результат выполнения функции console.log. В процессе её выполнения в консоль выводится 1, а её результат (undefined) попадает в testA

После чего в testB присваивается безымянная функция, в testC - результат выполнения testB (что опять-таки приводит к вызову console.log), и в конце просто вызывается testB

READ ALSO
Отмена click на 5 секунд

Отмена click на 5 секунд

Ломаю себе голову уже второй часМожет кто поможет:

109
Отправка куки на сервер

Отправка куки на сервер

Есть Vue приложениеС него идёт запрос к API для получения данных о пользователе

119
Повторение анимации вылетающего блока

Повторение анимации вылетающего блока

Я не понимаю, почему не выходит повторить анимациюТо есть при нажатии на пробел я ожидаю, что вылетит столько чёрных блочков, сколько нажатий...

113
Скрыть/удалить из блока существующий элемент при появлении/добавлении нового

Скрыть/удалить из блока существующий элемент при появлении/добавлении нового

Имеем такие блокиВ подменю 2 Блок2 появляется новая строка, при ее появлении нужно убрать другую строку

94