About the scope in javascript,why the following not output 21 but 22?
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 | function t() { var x = 1; if(true) { var x = 2; alert(x); } alert(x); } t(); |
有人知道原因吗?
因为javascript(好的ecmascript)还没有块作用域。只是功能范围。
实际上只有一个变量声明被提升到函数的顶部,所以
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function t() { var x = 1; // v---------immediately invoked function to create a new scope (function() { // new variable scope if(true) { var x = 2; alert(x); // 2 } })(); alert(x); // 1 } t(); |
"var"关键字应用于整个函数中,因此您拥有的代码的行为将与此相同:
1 2 3 4 5 6 7 8 9 | function t() { var x = 1; if (true) { x = 2; alert(x); } alert(x); } t(); |
javascript中的变量的作用域是函数,而不是块。你有两个