修改说辞

This commit is contained in:
Xargin 2016-12-15 15:42:41 +08:00
parent 649771641a
commit fdd2b6b4f1

View File

@ -4,7 +4,7 @@
不要将作用域和生命周期混为一谈。声明语句的作用域对应的是一个源代码的文本区域;它是一个编译时的属性。一个变量的生命周期是指程序运行时变量存在的有效时间段,在此时间区域内它可以被程序的其他部分引用;是一个运行时的概念。
语法块是由花括弧所包含的一系列语句就像函数体或循环体花括弧对应的语法块那样。语法块内部声明的名字是无法被外部语法块访问的。语法块定了内部声明的名字的作用域范围。我们可以这样理解语法块可以包含其他类似组批量声明等没有用花括弧包含的代码我们称之为语法块。有一个语法块为整个源代码称为全局语法块然后是每个包的包语法块每个for、if和switch语句的语法块每个switch或select的分支也有独立的语法块当然也包括显式书写的语法块(花括弧包含的语句)。
句法块是由花括弧所包含的一系列语句就像函数体或循环体花括弧包裹的内容一样。句法块内部声明的名字是无法被外部块访问的。这个块决定了内部声明的名字的作用域范围。我们可以把块block的概念推广到包括其他声明的群组这些声明在代码中并未显式地使用花括号包裹起来我们称之为词法块。对全局的源代码来说存在一个整体的词法块称为全局词法块对于每个包每个for、if和switch语句也都对应词法块每个switch或select的分支也有独立的语法块当然也包括显式书写的词法块(花括弧包含的语句)。
声明语句对应的词法域决定了作用域范围的大小。对于内置的类型、函数和常量比如int、len和true等是在全局作用域的因此可以在整个程序中直接使用。任何在在函数外部也就是包级语法域声明的名字可以在同一个包的任何源文件中访问的。对于导入的包例如tempconv导入的fmt包则是对应源文件级的作用域因此只能在当前的文件中访问导入的fmt包当前包的其它源文件无法访问在当前源文件导入的包。还有许多声明语句比如tempconv.CToF函数中的变量c则是局部作用域的它只能在函数内部甚至只能是局部的某些部分访问。