今天使用Dcloud掃碼功能,success成功方法設置data中的scanContext變量,報「undefined」!javascript
1、懷疑是掃碼內容不是JSON對象,沒法點屬性報錯。排除,使用JSON.parse轉換成功後,依然報「undefined」。
2、怎麼就「undefined」呢,百思不得其解。繼續想辦法java
忽然,看到附件選擇的方法,人家是設置的this.fileUrl成功的。比對下,什麼區別。發現定義的匿名方法,寫法不一樣。個人是function(res),人家的是(res) =>箭頭。考下去試試,ide
成功了!!!函數
這就是JS中匿名方法的this指向問題,function的聲明方式,this指向的是自己,父級的變量都沒法訪問。請閱讀下面的源碼,運行會報錯嗎?this
<script type="text/javascript"> var num = 100; var thah={ success:function(){ alert(this.num); } } thah.success(); </script>
請熟悉的朋友跟我一塊兒讀:var that = this;//大法好
更時尚的是箭頭聲明 success:(res)=>{} 更時尚、更流行、高大上。code
以上,是關於JS匿名函數this的指向問題。踩過的坑,一塊兒歡呼。對象