下面代码结果是:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
结果并不是语法错误找不到 i,而是 弹出 1。
结论:JS的变量的范围是根据方法块来划分(function的一对大括号{})。切记,是function块,而for、while、if块并不是作用域的划分标准。
引申2 下面代码结果是:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
结果是:依次弹出 undefined 50 10 100
结论:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。
引申3 下面代码结果是:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
结果是:依次弹出 100 10 100
结论:当全局变量跟局部变量重名时,局部变量的范围会覆盖掉全局变量的范围。若想指定是全局变量可以使用 window.globalVariableName。
综上所述:
1.Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。
2.Javascript的变量的范围是根据方法块来划分的(也就是说以function的一对大括号{ }来划分)。切记,是function块,而for、while、if块并不是作用域的划分标准。
3.当全局变量跟局部变量重名时,局部变量的范围会覆盖掉全局变量的范围,当离开局部变量的范围后,又重回到全局变量的范围。(若想指定是全局变量可以使用 window.globalVariableName)
来源:http://blog.csdn.net/wenteryan