先上代碼:
int main()
{
int dmy = 256;
int val = 10;
const char *fmt = "val = %d\n";
void (^blk)(void) = ^{print(fmt, val)};
val = 2;
fmt = "These values were changed. val = %d\n";
blk();
return 0;
}
該代碼中,Block語法的表達式使用的是它之前聲明的自動變量fmt和val。Blocks中,Block表達式截獲所使用的自動變量的值,即保存該自動變量的值,所以在執行Block語法後,即使改寫Block中使用的自動變量的值也不會影響Blcok執行時自動變量的值。