一个有关JS函数作用域的题目
相关代码
var xyx = 1;
function fx(){console.log(xyx)}
var xyx = 2;
fx();
输出的结果是2。
不是应该是从fx函数声明处从内往外找,最里头没有然后往外往上找到了xyx为1,这时就输出了嘛?为什么会变成2呢?我是不是理解有误,请指点迷津谢谢!
var xyx = 1;
function fx(){console.log(xyx)}
var xyx = 2;
fx();
输出的结果是2。
不是应该是从fx函数声明处从内往外找,最里头没有然后往外往上找到了xyx为1,这时就输出了嘛?为什么会变成2呢?我是不是理解有误,请指点迷津谢谢!
不是函数调用时才去执行函数体么?
根据js 执行机制
所以就为2
var xyx = 1;
function fx(){console.log(xyx) } // 1
fx();
var xyx = 2;
不知道对不对
var 美国总统 = 奥巴马
function 暗杀(){弄死美国总统}
var 美国总统 = 特朗普
暗杀()
//特朗普,卒.
你函数内的变量名只是指向了地址,而不是数字1.这一点要牢记,有时候会出现更难以理解的情况.
你是否在纠结变量声明提升 和函数声明提升的问题?
此处不涉及声明提升的影响
调用之前的代码均会执行 你可以理解为除去声明提升,会在函数调用之前把所有关于此类相关的声明均执行一次
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
JavaScript是解释型语言,简单理解就是运行到哪一句就加载那一句(意思是这个意思,但是表达不完全准确)。你的代码分四步理解(以下解释暂不考虑变量提升问题):
如果考虑变量提升,以上代码相当于: