在函数外定义的变量被称为全局变量,作用域为全局。
优点 : 全局可用。缺点 : 容易被污染
在函数内定义的变量被称为局部变量,作用域为局部。
优点 : 不容易被污染。缺点 : 局部使用。
// 全局变量
String name = "lesscode";
void main(List<String> args) {
print(name);
// 局部变量
String nameIn = "lesscode";
print(nameIn);
}
闭包 即一个函数对象,即使函数对象的调用在它原始作用域之外,依然能够访问在它词法作用域内的变量。
示例
// 闭包示例
Function consume() {
// 存款数
int deposit = 1000;
return () {
deposit -= 100;
print(deposit);
};
}
void main(List<String> args) {
Function consumeFunc = consume();
consumeFunc();
consumeFunc();
}
在 consume 函数中,我们定义了一个 deposit 局部变量用于保存用户余额,之后我们使用 return 关键字返回了一个匿名函数。在外部调用时我们接收了此返回函数( 我们称之为子函数 ,也称作内存函数 ),当子函数执行完成后会释放自己,但并不会释放父函数 consume() ,这样 desposit 变量被持续保留。达到了在函数 consume() 外部控制内部局部变量的目的。