js作用域知识点:
- 变量提升
- 不用var关键字声明的会成为全局变量
- 作用域链
| <input type="button" class="btn btn-primary" value="按钮A" onclick="AA();" /><br /><br /> | |
| <input type="button" class="btn btn-primary" value="按钮B" onclick="BB();" /><br /><br /> | |
| <input type="button" class="btn btn-primary" value="按钮C" onclick="CC();" /><br /><br /> | |
| <input type="button" class="btn btn-primary" value="按钮D" onclick="DD();" /><br /><br /> |
| /* 答案是1,因为已经先有了变量b,重复声明它并不会使它被重新初始化,也不会使它的值丢失*/ | |
| function AA() { | |
| b = 1; | |
| var b; | |
| alert(b); | |
| } | |
| /*答案是function a() { }, 因为在第二行的语句中对a重新赋值了*/ | |
| function BB() { | |
| function a() { }; | |
| var a; // js语法灵活,可以先赋值后声明,但为了程序有很好的可读性,建议将声明语句放到顶部 | |
| alert(a); | |
| } | |
| /*答案是undefined 5 加了var就变成局部变量了*/ | |
| function CC() { | |
| var a = 10; | |
| function b() { | |
| alert(a); // undefined | |
| var a = 5; | |
| alert(a); | |
| } | |
| b(); //执行方法b | |
| } | |
| /*答案是10 5*/ | |
| function DD() { | |
| var a = 10; | |
| function b() { alert(a); a = 5; alert(a); } | |
| b(); | |
| } |