При создании объекта одному из свойств можно приписать вызов функции. Например:
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)
Вроде же в приоритете должно быть выполнение функции, а только лишь потом присвоение. ЧЯДНТ?
При создании объекта подобным образом:
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
Продвижение своими сайтами как стратегия роста и независимости