對js函式作用域的進一步理解

2021-08-09 13:32:11 字數 843 閱讀 6483

今天在寫乙個threejs的專案時,遇到了乙個問題,我需要批量初始化一批作為紋理圖放入陣列中,然後再批量初始化一堆json模型,最後在把紋理圖貼到對應的模型上面,這裡就涉及到了幾個問題。

1.首先載入和模型都是乙個非同步的操作,換句話說,你不能控制那張或者哪個模型先載入好,我想到的解決方法是,用乙個計數的變數在每次呼叫載入器時,確定某張或者某個模型存放的位置,這樣就能夠做到模型與一一對應。

2.在載入模型時我又遇到了作用域的問題,開始我是這麼寫的,很明顯load方法的oncomplete引數根本無法接收到i這個變數,因為非同步的原因,等到該函式執行的時候必然是找不到i變數的(因為i已經釋放掉了),所以我們必須找到乙個辦法使得能夠找到i。

for(vari = 0 

; i < len; i++) );

}

3.我有將i設定成了全域性變數,但是問題又來了,當oncomplete呼叫i時,i已經自加到了len,所以這個辦法也不行。

4.最後我使用了乙個匿名函式,然他收乙個i引數,這樣每次載入之前,匿名函式中就會為oncomplete存放當前i的值,當載入完成之後就可以直接使用該mesh對應的i,等這一切執行完畢,系統才會釋放這個匿名函式以及其中的i變數,這樣就巧妙地完成了我們的目的。

for(vari = 0 

; i < len; i++) );

})(i);

}

之前我也研究過關於js作用域,閉包之類的文章,並自己總結發表了部落格,當時只是對照書中的案例寫了一遍,不甚清楚,如今等自己真正踩了一遍這個作用域的小坑,也算對其又增強了幾分了解~

對mock的進一步理解

get judgedoc shinfo time node api.side effect self.side effect judgedoc shinfo 2009 12 11 def side effect judgedoc shinfo self,verify open from 1 time...

對遞迴的進一步理解

這週看了一道求陣列排列的題目,解法用了遞迴,看懂之後自己對遞迴的理解更深了。遞迴的定義 遞迴是指程式呼叫自身,但呼叫時必須改變呼叫引數,直到某個引數滿足退出條件。函式呼叫的過程會用到run time stack,遞迴時棧中的內容有相似性,但是每一層的差異最終會導致執行棧增長的停止,並且從棧頂返回。理...

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...