JS的for循環(huán)中的var?和?let詳解
在js的嵌套for循環(huán)異步執(zhí)行,聲明 i 和 使用 i 獲取到的變量 都要用 let 聲明,不要用var。
除非封裝一個函數(shù),把參數(shù)傳進(jìn)去調(diào)用,才能避免var使用最后一個變量,沒必要。
1.同步 vs 異步:
Java.perform 本身是同步執(zhí)行的。它會立即執(zhí)行傳遞給它的函數(shù)。
在 Java.perform 內(nèi)部,你為每個 Utils 類的方法重寫了實(shí)現(xiàn)。這些重寫的實(shí)現(xiàn)(implementation 函數(shù))是在目標(biāo)應(yīng)用調(diào)用這些方法時被異步觸發(fā)的。
2.變量作用域:
使用 let 聲明 methodName 確保了每次迭代中 methodName 都是一個新的綁定。
使用 var 聲明 methodName 會導(dǎo)致所有閉包共享同一個變量,這在方法重寫中可能導(dǎo)致意想不到的結(jié)果。
3.異步觸發(fā):
雖然重寫的方法實(shí)現(xiàn)是同步定義的,但實(shí)際調(diào)用這些方法(即執(zhí)行重寫的實(shí)現(xiàn))是異步觸發(fā)的,取決于目標(biāo)應(yīng)用何時調(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)
}
}
}
})到此這篇關(guān)于JS的for循環(huán)中的var 和 let的文章就介紹到這了,更多相關(guān)JS的for循環(huán)中的var 和 let內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript運(yùn)動框架 解決速度正負(fù)取整問題(一)
這篇文章主要為大家詳細(xì)介紹了JavaScript運(yùn)動框架的第一部分,解決速度正負(fù)取整問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
js實(shí)現(xiàn)String.Fomat的實(shí)例代碼
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)String.Fomat的實(shí)例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
javascript foreach中如何獲取數(shù)組下標(biāo)/index
這篇文章主要介紹了javascript foreach中如何獲取數(shù)組下標(biāo)/index問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

