原文地址:http://www.cnblogs.com/skylar/p/3986087.html
黄金守则第一条:
js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域,函数外面的变量函数里面可以找到,函数里面的变量外面找不到。
<script>
var a = 10
function aaa()
{
alert(a)
}
function bbb()
{
var a=20
aaa()
}
bbb()
</script>
结果为10,在函数bbb()中定义的变量,在aaa()中无法找到,所以a的值依旧为10。
<script>
function aaa()
{
var a=b=10
}
aaa()
alert(a)
alert(b)
结果报错a未被定义,而b正常为10。由于a前面的var,变量a仅能在函数aaa()中被找到,而b没有var声明所以被认作了全局变量。(作者所说的赋值操作自左向右个人认为是错误的)
黄金守则第二条:
变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。
<script>
var a=10
function aaa()
{
alert(a)
var a=20
}
aaa()
</script>
结果a为undefined ,查找a时,就近查找在函数中的a,由于预解析的作用,a的值为undifined。(预解析之后再说)
<script>
var a=10
function aaa()
{
alert(a)
a=20
}
</script>
结果a为10,就近原则寻找的是var声明的变量,函数内没有,所以找到了全局变量a,而在输出是还没有执行修改值的语句。
黄金守则第三条:
当参数跟局部变量重名时,优先级是等同的。
<script>
var a=10