JS的for循環(huán)中的var?和?let詳解
在js的嵌套for循環(huán)異步執(zhí)行,聲明 i 和 使用 i 獲取到的變量 都要用 let 聲明,不要用var。
除非封裝一個函數(shù),把參數(shù)傳進去調(diào)用,才能避免var使用最后一個變量,沒必要。
1.同步 vs 異步:
Java.perform 本身是同步執(zhí)行的。它會立即執(zhí)行傳遞給它的函數(shù)。
在 Java.perform 內(nèi)部,你為每個 Utils 類的方法重寫了實現(xiàn)。這些重寫的實現(xiàn)(implementation 函數(shù))是在目標應用調(diào)用這些方法時被異步觸發(fā)的。
2.變量作用域:
使用 let 聲明 methodName 確保了每次迭代中 methodName 都是一個新的綁定。
使用 var 聲明 methodName 會導致所有閉包共享同一個變量,這在方法重寫中可能導致意想不到的結(jié)果。
3.異步觸發(fā):
雖然重寫的方法實現(xiàn)是同步定義的,但實際調(diào)用這些方法(即執(zhí)行重寫的實現(xiàn))是異步觸發(fā)的,取決于目標應用何時調(diào)用這些方法。
Java.perform(function () { let Utils = Java.use("com.xxx.xxx.Utils"); var methods = Utils.class.getDeclaredMethods(); for (let i = 0; i < methods.length; i++) { let methodName = methods[i].getName(); console.log('methodName: ', methodName) var overloadsArray = Utils[methodName].overloads; for (let j = 0; j < overloadsArray.length; j++) { overloadsArray[j].implementation = function () { var params = ''; for (let k = 0; k < arguments.length; k++) { params += arguments[k] + ' '; } console.log(`utils.${methodName} is called! params is: `, params); console.log(this); return this[methodName].apply(this, arguments) } } } })
到此這篇關于JS的for循環(huán)中的var 和 let的文章就介紹到這了,更多相關JS的for循環(huán)中的var 和 let內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
不得不分享的JavaScript常用方法函數(shù)集(下)
不得不分享的JavaScript常用方法函數(shù)集,幫助大家更好的學習javascript程序設計,有興趣的朋友可以參考一下2015-12-12JavaScript學習筆記之數(shù)組的增、刪、改、查
這篇文章主要介紹了JavaScript學習筆記之數(shù)組的增、刪、改、查的相關資料,需要的朋友可以參考下2016-03-03zepto中使用swipe.js制作輪播圖附swipeUp,swipeDown不起效果問題
Swipe JS 是一個輕量級的移動滑動組件,支持 1:1 的觸摸移動,阻力以及防滑性能都不錯,可以讓移動web應用展現(xiàn)更多的內(nèi)容,能解決我們對于移動Web對滑動的需求。下面小編給大家介紹zepto中使用swipe.js制作輪播圖附swipeUp,swipeDown不起效果問題,需要朋友可以參考下2015-08-08iframe的父子窗口之間的對象相互調(diào)用基本用法
iframe在使用時可能會涉及到父子窗口之間傳值和方法的相互調(diào)用,研究了一下其實非常簡單,就那么幾個用法而已,在此與大家分享下,感興趣的朋友可以參考下2013-09-09