var a=1;
function btn(){
console.log(a);
}
document.onclick=function(){
var a=3;
btn();
}
问题:函数btn调用后为什么console.log(a)的结果是1而不是3
var a=1;
function btn(){
console.log(a);
}
document.onclick=function(){
var a=3;
btn();
}
问题:函数btn调用后为什么console.log(a)的结果是1而不是3
相关知识:JS中的变量作用域。
可以理解为:函数内部在确定外部变量的时候,是沿着函数声明的嵌套链条往上查找,而不是沿着函数调用的链条找。
这样做可以在声明的时候就确定函数需要用到的变量,如果在调用的时候再确定的话,那可能是一个失败的设计,JS
里的 this
指向就被认为是一个失败的设计。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
函数内作用域是定义时,而非运行时
去掉
var
输出3,是因为a
成了全局变量,就没有作用域这一说了