Javascript语言的模块化
一、 javascript模块化的层次:语法作用域
javascript的语法作用域有四种
1、 表达式
2、 语句和批语句
If()…else…
For()…
Do...while()
While()…
With()…
Switch(){…}//必须加大括号
Try{} //必须加大括号
Catch(){…}//必须加大括号
Finally{…}//必须加大括号
3、 函数
4、 全局
这些作用域之间只存在平行和嵌套的关系。如下规则
1、 相同级别的语法作用域可以相互嵌套
2、 高级别的语法作用域能够包含低级别的语法作用域
3、 低级别的语法作用域不能包含高级别的语法作用域。由于不存在包含关系,因此语言实现时,一般处理成语法上的违规,或者理解成“平行”关系。
二、 javascript模块化的效果:变量作用域
变量作用域又叫变量的可见性。有四种级别
1、 表达式
2、 语句(javascript没有语句级别的变量作用域)
3、 函数(局部作用域)
4、 全局
变量作用域的次序问题
1、 一些语言(如c,c++,java)变量只能先声明才能访问。以下代码在c中编译就通不过,在js中却可以
Function fun() {
If(bool) {
Alert(bool);
}
Var bool = true;
}
2、 Js则可以先访问再显示声明,是没有次序限制的。因为显示声明总是在代码执行之前,就被引擎理解了。
变量的生存周期,创建和销毁
1、 创建:引擎做语法分析,发现显示声明时或引擎执行代码;发现写一个未被创建的变量时。
2、 销毁:引擎执行到函数结束将清除函数内未被引用的变量;引擎执行到全局代码块终结或引擎卸载和重载人时,将清除全局的变量和数据的引用。
3、 所以js中变量生存周期只有两个,函数的局部执行期间和函数外的引擎的全局执行期间。这是由于js引擎在实现“函数”这个机制时采用的方法。
4、 变量作用域讨论的是“在形式上这个变量能在哪个范围内娶到”,变量的生存周期讨论的是“在实现中什么时候创建和释放一个变量”
注意:
1、 语法作用域不等于变量作用域
2、 变量的可见性受限于它所在的语法结构的(语法)作用域
3、 在全局范围内任意说明变量,尤其使用for循环时声明变量不可取
4、 在函数内部不使用var声明变量不可取