关于JavaScript函数作用域的问题想请教
一个有关JS函数作用域的题目
相关代码
var xyx = 1;
function fx(){console.log(xyx)}
var xyx = 2;
fx();
输出的结果是2。
不是应该是从fx函数声明处从内往外找,最里头没有然后往外往上找到了xyx为1,这时就输出了嘛?为什么会变成2呢?我是不是理解有误,请指点迷津谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
fx();是在最后执行的
你是否在纠结变量声明提升 和函数声明提升的问题?
此处不涉及声明提升的影响
变量提升了啊
简单的说,这是一段同步代码。
在执行fn前,依次执行,变量定义-变量赋值1-函数定义-变量赋值2。
执行时变量已被赋值2,跟函数定义没有关系。
首先你得清楚是什么时候开始函数体内的执行环境的,调用的时候才开始的,而变量会提升,这个xyz的全局变量的初始化是在 调用之前的。所以你能拿到2
你函数内的变量名只是指向了地址,而不是数字1.这一点要牢记,有时候会出现更难以理解的情况.
不是函数调用时才去执行函数体么?
根据js 执行机制
所以就为2
不知道对不对
JavaScript是解释型语言,简单理解就是运行到哪一句就加载那一句(意思是这个意思,但是表达不完全准确)。你的代码分四步理解(以下解释暂不考虑变量提升问题):
如果考虑变量提升,以上代码相当于: