讨论一个js变量作用域的问题
<script type="text/javascript">
var myvar = "my value";
(function(){
console.log(myvar);
var myvar = "local value";
})()
</script>
不论是var myvar = "my value";
还是myvar = "my value";
输出的结果都是undefined,内部定义了var myvar,但是因为没有赋值所以为undefined。这个和把它注释掉是一样的。
如果改为
<script type="text/javascript">
var myvar = "my value";
(function (){
console.log(myvar);
myvar = "local value";
})()
</script>
就会出现奇妙的事情了,可以看到输出结果为my value,因为将myvar定义为了全局变量,这样先赋值的my value就成为了输出结果。
所以综上,为了简单,由于存在变量声明提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这大大地提升了程序代码的清晰度。