有名函数调用遇到的问题

image

var a=1;
function btn(){
    console.log(a);
}
document.onclick=function(){
    var a=3;
    btn();
}

问题:函数btn调用后为什么console.log(a)的结果是1而不是3

阅读 1.4k
2 个回答

函数内作用域是定义时,而非运行时

去掉var输出3,是因为a成了全局变量,就没有作用域这一说了

相关知识:JS中的变量作用域

可以理解为:函数内部在确定外部变量的时候,是沿着函数声明的嵌套链条往上查找,而不是沿着函数调用的链条找。
这样做可以在声明的时候就确定函数需要用到的变量,如果在调用的时候再确定的话,那可能是一个失败的设计,JS 里的 this 指向就被认为是一个失败的设计。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏