作用域

变量的作用域指的是可以访问到该变量的代码区域。Solidity 中的作用域与其他花括号语言基本相同。即从变量的声明语句开始,一直到最近一个花括号结束。

对于在 for 循环的开始语句部分声明的变量,视为在花括号内最先声明的变量:它的作用域在整个 for 循环结构体内:

Solidity 中的函数是支持提前声明返回变量的。通过函数参数和返回值中声明的变量,其作用域也是在整个函数体中:

如果在嵌套的花括号中声明了同一个变量,则嵌套层数更深的变量的作用域会覆盖掉外层声明的同名变量的作用域:

代码示例:

Scope.sol
运行
复制
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.24;

contract Scope {
    function f() public pure {
        uint i; // 1号

        {
            i = 2;   // 此处 i 为1号变量
            uint i;  // 2号
            i = 3;   // 此处 i 为2号变量
        }

        {
            i = 2;   // 此处 i 为1号变量
            uint i;  // 3号
            i = 3;   // 此处 i 为3号变量
        }

        i = 4;  // 此处 i 为1号变量
    }
}