<html>
<body>
<script type="text/javascript">
var amt=100;
function a(){
var amt =amt;
alert(amt)
}
a()
</script>
</body>
</html>
<html>
<body>
<script type="text/javascript">
var amt=100;
function a(){
var amt =amt;
alert(amt)
}
a()
</script>
</body>
</html>
所谓的声明提前,可以理解为引擎预扫描代码,把所有的var声明的变量放到作用域的最上面
function a(){
var amt = undefined;
amt = amt;
alert(amt)
}
这时候访问到的amt自然就是undefined了
已采纳的那个答案虽然正确,但没把具体原理说出来
还是2楼chenqiao说到点子上了,声明提前,也就是var 声明会在域里面最先执行
即使在声明上面获取外域的变量,也不行,比如:
function a(){
console.log(amt); //按照执行顺序,理应该先执行这个
var amt = amt; //但因为这里有个声明 所以这里才是最先执行的
console.log(amt);
}
所以导致执行步骤最终变成:
function a(){
var amt;
amt = amt;
console.log(amt);
console.log(amt);
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
——————————————— 神奇的分割线 ———————————————
正解:
原答案有误:
——————————————— 神奇的分割线 ———————————————
提示:请将答案主体放在回答中,而不是评论里
编辑 By:月之领主LM