Solidity

在 for 或 while 循環內部或外部聲明變數是否更有效?

  • January 12, 2022

在solidity中,在a whileorfor循環中聲明一個變數會導致在每次循環迭代期間重新聲明該變數嗎?如果是這樣的話,這是否比在循環外聲明該變數並簡單地在內部重新分配它的氣體效率更低?

聲明外部並分配內部循環:

uint myNumber;
for (uint i=0; i<10; i++) {
 myNumber = i*i;
}

聲明並分配內部循環:

for (uint i=0; i<10; i++) {
 uint myNumber = i*i;
}

這類問題最容易測試。

所以我在 Remix 中創建了一個合約並執行了這兩個函式。第一個a花費 25201 gas,b花費 25260 gas。因此,在循環外聲明變數更便宜。這很可能是因為您所說的:變數被重新分配。

二手契約:

contract A {
   function a() public {
       uint myNumber;
       for (uint i=0; i<10; i++) {
           myNumber = i*i;
       }
   }

   function b() public {
       for (uint i=0; i<10; i++) {
           uint myNumber = i*i;
       }
   }
}

引用自:https://ethereum.stackexchange.com/questions/118754