2017-11-18 74 views
-1

我對遞歸函數中增加值的功能有疑問。在遞歸函數中增加計數器

當我使用:

counter++不起作用

但是當我使用counter + 1它正常工作。

我還發現它的另一種工作方式:++counter,但我真的不明白在櫃檯前使用++有什麼不同。

實施例:

printEachName = (companyNames, newPeople, counter, callback) => { 
    if (companyNames.length === newPeople.length) { 
    return callback(false, companyNames); 
    } 
    console.log('counter >>> ', counter); 
    let newP = newPeople[counter]; 

    companyNames.push(newP.name); 
    printEachName(companyNames, newPeople, counter + 1, callback); 
} 

printEachName([], newPeople, 0, (errorPrinting, response) => { 
    if (errorPrinting) { 
    //res.send() 
    return; 
    } 

    console.log('response is >>> ', response); 
}); 
+0

@Luis,'計數器++'是不一樣的'計數器=計數器+ 1'。 'counter ++'更像'temp = counter,counter = counter + 1,temp'。在JavaScript控制檯中試試這個,你會看到'counter = 123; foo =(temp = counter,counter = counter + 1,temp)'。 'foo'將爲123','counter'爲124 – gman

回答

3

這是因爲counter++,++countercounter + 1是三個完全不同的東西。

解釋的例子:

function f(n) { console.log(n); } 
var counter = 0; 

// Call f(counter) and then increment counter after 
f(counter++); 
// log: 0 
// counter: 1 

// Increment counter and then call f(counter) 
f(++counter); 
// log: 2 
// counter: 2 

// Call f() with the value counter+1, do not alter counter 
f(counter + 1); 
// log: 3 
// counter: 2 

+ 1方法有效,因爲你提供正確的增加值的函數調用。前綴增量也會起作用,但由於counter在其他任何地方都沒有使用,所以這隻會使事情過度複雜化。後綴版本是永遠不會工作。

1

這可能已經回答了,但a++取值a並使用它,然後遞增該值。另一方面,++a首先增加a的值,然後使用遞增的值(在特定示例中相當於a + 1)。

1

++變量前是增加前的運算符,而++後面的變量是後增加的運算符。

printEachName(companyNames, newPeople, counter++, callback); 

計數器的值的printEachName之後被更新()被執行。

而在

printEachName(companyNames, newPeople, ++counter, callback); 

計數器的值甚至printEachName前瞬間即更新()被實際執行。

但是當你使用

printEachName(companyNames, newPeople, counter + 1, callback); 

則計數器的值還沒有被更新all.But計數器+ 1作爲參數傳遞給函數。

1

只需添加到其他人的解釋

counter++ 

等效於此

temp = counter, counter = counter + 1, temp 

你可以在這裏嘗試一下,看看

var counter1 = 123; 
 
var foo1 = counter1++; 
 

 
console.log("counter1:", counter1, "foo1:", foo1); 
 

 
var counter2 = 123; 
 
var foo2 = (temp = counter2, counter2 = counter2 + 1, temp); 
 

 
console.log("counter2:", counter2, "foo2:", foo2);

variable++是後增量。換句話說,返回變量中的值,然後增量。

如果你真的想只是增加你只可以說是用++variable