C/C++語音中指針讓很多人望而卻步,Java中沒有指針讓很多人趨之若鶩。
那麼深受編程小白喜歡的javascript好像也沒有指針啊?博主自己在學習的過程中,確實沒有見到有哪塊知識明確地指出 javascript 的指針是什麼,沒有變量類型專門表示指針這種類型。
其實在不同的語言內部,應該都是包含指針的。但是考慮到受衆的接受能力,將指針包裝隱藏起來了。在 Javascript 中與指針相關的主要是引用。換句話說,就是 b={x:"x",y:"y"}; a = b
其中,可以通過 a 進行操作,實現對 b 的操作。如,a.x = "1" ; console.log(b.x);
顯示的結果是是 1
。
相信上面這個問題大家接觸的比較多一些。但是很多時候也只是當作一個引用特性去考慮 ,並沒有深入思考過。下面,通過一個問題來引入 javascript 的指針概念:
有一個函數,遞歸計算,將符合條件的次數累加起來,並最終返回。
正常的思路,可能是建立一個全局變量,綁定以window 或者 global 對象上。對該變量進行累加。
function Re(n){
window.count ? null : window.count = 1;
if( n <100){
if(n%2)window.count++;
return Re(n+1)+3;
}else{
return 1;
}
}
固然這樣是可以做到的,但是如果將計數作爲一個參數,放入 Re() 函數中呢?需要將指定的參數作爲記數參數時怎麼辦。切記,此時的傳參爲值傳參,怎麼修改爲指針傳參?
這個時候,可以利用 javascript 的引用特性,和數組的特性:
function Re(array , n){
if(n<100){
if(n%2)array[0]++;
return Re(n+1)+3;
}else{
return 1;
}
}
使用數組作爲參數,實際中只對 [0] 元素進行調用,保證了值傳遞的同時,可以修改值。達到了類似於C語言中的指針作用。