在学习node.js过程中,往往忽略了对JavaScript基础的学习,一下做一个简要的列举。
作用域
第一个例子
想想一下在Java中,如果我们这样写一段程序:
|
|
当然是有问题了,在Java/C等语言中,一段花括号就是一个独立的作用域,在作用域内定义的整形变量a,在花括号外相当于超出了作用域。而在JavaScript中,如果我们这样写:
|
|
这样做事完全合法的。是因为:这是因为在JavaScript中,作用域完全由函数来决定,而if/for等语中的花括不是独立的作用域。
第二个例子
我们继续写一段程序:
|
|
我们再其中再加入一行var = 5;
:
|
|
在JavaScript中,变量的搜索顺序为:由内到外,顺序搜索。
在第一段例子中,console.log()会先搜索obj中是否存在变量a,没有若搜索到,所以继续向外层作用域进行搜索,所以可以看到输出为3的结果。
在第二段例子中,现在obj中搜索到 var a = 5;
时,变量a存在,那么便不进行继续向外搜索。然而当程序执行到console.log()
时,当前作用域内的a还未被初始化,所以输出 undefined的结果。
第三个例子
|
|
全局作用域:顾名思义,对象在全局中都可以随时被引用。这里需要注意的是,隐式定义的变量(即不通过var定义的变量)会定义在全局作用域中,隐式定义的使用会经常出现定义了变量但被我们忘记的情况,不仅不违反了模块化编程的原则,还经常会对程序造成非常不好的影响,所以,我们在任何地方都不应该使用隐式定义。