Dartにおけるスコープ(変数の有効範囲)は、C系の言語とほぼ共通です。
宣言と同じ中括弧”{}”内であればその変数へアクセスすることが出来ます。
var global_a = 1; void main(){ var main_var = 2; if (true){ var inside_var = 3; var total = global_a + main_var + inside_var; print(total); // OK } print(inside_var); // error inside_varの宣言された中括弧の外ではinside_varにアクセスできない }
例外 クロージャー
上記の唯一の例外がクロージャーとなります。匿名関数を返すような場合に利用可能な概念となり、この場合、中括弧の範囲を超えて、当該無名関数がメモリ上に展開された時点でのスコープを参照できます。
void main(){ // Function型を返す関数 Function addNum(int num){ return (int i) => num + i; // 返されるFunction(無名関数/匿名関数) } Function a = addNum(2); // 返される関数は int (i) { return 2+i; } Function b = addNum(3); // 返される関数は int (i) { return 3+i; } print(a(1)); // 3を返す print(b(10)); // 13を返す }