Javascript ішіндегі ++ және + = 1 арасындағы айырмашылық

Келесі функциялардың неше түрлі нәтиже беретінін біреу түсіндіре алады. Біріншісі жұмыс істемейді, екіншісі істейді. Мен ойымша, + = 1 және ++ деп ойладым.

(Мен бұл кодты нақты пайдаланғым келмейді, бұл тек айырмашылықты көрсету үшін ғана).

/*function 1*/
function incrementIfZero1(base,element) {

    if (element == 0) {
        return base++;
    }
    else
    {
        return base;
    }
};


/*function 2*/
function incrementIfZero2(base,element) {

    if (element == 0) {
        return base+=1;
    }
    else
    {
        return base;
    }
};

incrementIfZero1(1,0) /* -> 1*/
incrementIfZero2(1,0) /* -> 2*/

Кез келген көмек өте жоғары бағаланады.

Рахмет,

Робин

[Өңдеу:]

Жауаптарыңыз үшін рақмет, қазір мағынасы бар. Мен сондай-ақ 1-функциямен бірдей нәтижеге әкеліп соқтырған келесі әрекетті байқадым:

return (base++)

Мен қазір 2-функциямен бірдей нәтиже бермейтініне таң қалдым. Қайтарудан бұрын бағаланатын жақшаларды «күшін» күткен болар едім. Неліктен бұлай емес деп ойлайсың ба?

10
Жедел жауаптарыңыз үшін рақмет - қосымша және қосымша сұрақтар үшін төмендегі өңдеуді қараңыз
қосылды автор RobinL, көзі

8 жауаптар

base ++ қайтаратын кезде, ол қадамды көбейтпестен бұрын, оның мәнін қайтарады. Өсемнің бірінші орын алғанына көз жеткізу үшін ++ base жасау керек

otherwise ++ is the same as +=1

[edit] сіздің редакцияңызға жауап ретінде, кездейсоқ мәлімдемелерді жақшаға көшіруге тырысамын және математикалық операторлардың көбі күтілгендей жауап береді, бұл өсім босату сияқты көрінеді, себебі, алдын ала көбейтуден кейінгі қадамды синтаксисі өте қасақана болып табылады және сөздің өзі қайтарады нақты мәнді оны жақшадан орап алуыңызға қарамастан

12
қосылды
@RobinL өрнегі x ++ функциясын функциядан сырттан қайтаратын x ), содан кейін оны көбейтеді. x + = 1 өрнегі x көбейтіледі, содан кейін оны қайтарады.
қосылды автор bfavaretto, көзі
Рахмет - түсінемін деп ойлаймын. Қайтару (x ++) x ++ сияқты бірдей, себебі x-ге тапсырмаға келмейді, сондықтан екеуі де: «x-ге қайтып, сосын біреуін көбейту керек» дейді. Қайтару x + = 1 болса, 'x + 1-ден x-ге тағайындаңыз және x-дің нәтиже мәнін қайтарыңыз.'
қосылды автор RobinL, көзі

қайтару (base ++)

     

Енді мен бұл функция 2-функция сияқты нәтиже бермейтініне таң қалдым - мен жақшадан бұрын бағаланатын жақшаларды күтуге болар еді.

деген не?

Күшейткіштерге қарамастан, қадамының мәні бағаланады. Мұнда аулау - бұл JavaScript-те әрдайым құндылыққа әкеледі, содан кейін қайтарылады. Мысалы, var x = 2 + 2 жасаған кезде 2 + 2 бағаланады, содан кейін = операторына «қайтарылды» содан кейін бұл мәнді x деп тағайындайды. Postfix операторы base ++ ретінде ++ әртүрлі түрде жұмыс істейді: ол алдыңғы айнымалыны көбейтеді, бірақ өрнек инкрементация алдында мәнді қайтарады. Префикс қосымша операторы, екінші жағынан, қалағаныңызша жұмыс істейді, ++ base оны артқаннан кейін мәнді қайтарады.

5
қосылды
Мен бұл басқа да жауаптармен негізінен артық емес екенін білемін, бірақ ол мұның неге ол қалай әрекет ететінін түсінуге көмектеседі деп үміттенемін.
қосылды автор bfavaretto, көзі
Бұл жауап үшін рақмет - x ++ және қайтару (x ++) арасындағы айырмашылықтың жоқтығы туралы пайдалы қосымша ақпарат берді.
қосылды автор RobinL, көзі

base ++ қайтару. Бұл postfix increment, осылайша, өсім қайтарудан кейін өңделеді. Бұл нақты жағдай үшін return ++ base; дұрыс болар еді

3
қосылды
@JustinNiessner Шын мәнінде бұл емес. Бұл постфикстің белгілеріне ие көптеген (барлығы) тілдер үшін жарамды.
қосылды автор Luke, көзі
@JustinNiessner PHP-де осылай жұмыс істейді . Мүмкін, «көпшілігі» дұрыс сөз емес еді. «Кейбіреулер» дұрысырақ болар еді.
қосылды автор Luke, көзі
Сіз JavaScript-ті нақты деп көрсетуіңіз мүмкін ...
қосылды автор Justin Niessner, көзі
return base++;

Кейінгі қадам. Ол базаны ұстап тұратын мәнді көбейтеді, содан кейін өсім басталғанға дейін бастапқы мәнді қайтарады.

return base += 1;

Бір базаға қосады, содан кейін базаны қайтарады. Бұл алдын-ала өсім. Бұл сондай-ақ жазылуы мүмкін:

return ++base;
3
қосылды
Сіз сенімдіміз «base + = 1;» алдын ала емес, алдын-ала арта емес пе?
қосылды автор Dany Caissy, көзі
Ия, мен сенімдімін.
қосылды автор Dan455, көзі

Назар аударыңыз! ++ және + = арқылы екі түрді, жолды және нөмірді өзгертіп болған кезде айырмашылық бар:

count - бұл жол, count + = 1 түрді түрлендіру сияқты көрінеді және 2-санды жолға түрлендіреді, ал count ++ count аргументі, санға түрлендіреді және 1-ге көбейеді.

let count = process.argv[2]

while (count < 5) {
  console.log('Inside of the loop. Count is', count)
  count += 1//NOT likely what you want! Now, try it with count++
}

console.log('Outside of loop. Count is', count)

Басқа мысал:

> let num = '2'
undefined
> num++
2
> num
3

// VS using +=

> let num2 = '2'
undefined
> num2 += 1
'21'
> num2
'21'
2
қосылды

Біраз түсіндіру үшін.

«айнымалы + = 1» - «айнымалы = айнымалы + 1» эквиваленті. ++ айнымалы баламасы емес!

Айнымалы ++ сияқты нәрсе орнында қолданылуы мүмкін, екіншісі - тағайындау.

1
қосылды

абай болыңыз:

x = 1; y = (x ++ * 10 + 1);

тең:

y = 1 * 10 + 1 = 11

шынымен

x = 1; y = (++ x * 10 + 1);

тең:

y = 2 * 10 + 1 = 21;

аяқтау үшін:

++ x;

немесе

x ++;

айырмашылық жоқ!

1
қосылды

Бірінші функцияда не болады:

return base++; //at first base value is returned and then incremented.

2-ші функцияда:

return base+=1; //here the incrementation is done first and then the variable is returned.

стенограмма тағайындалуы жоғары басымдыққа ие, яғни ол осы сызықта өз жұмысын аяқтайды

1
қосылды