首页 新闻 会员 周边

js关于let使用的问题

0
悬赏园豆:10 [已解决问题] 解决于 2017-11-08 11:20
let x = 1;
function foo( y = function() { x = 2; }) {
var x;
y();
}
foo();

这个函数执行到y的时候x会自动等于1
let x = 1;
function foo( y = function() { x = 2; }) {  
let x;
y();
}
foo();

这块执行到y的时候x则是undefined

问题一:

为什么两次函数中的初始化x值不一样?这是var复用的上级let吗?

问题二:
这俩函数执行后最后结果都是2,为什么函数内的let修改会影响上级?请大神详细解释一下,这块看了半天没懂



刘冰0117的主页 刘冰0117 | 初学一级 | 园豆:102
提问于:2017-11-07 20:46
< >
分享
最佳答案
1

先看代码: 第一个: let 定义了一个块级变量x=1,你创建了一个全局函数foo,foo的参数y= function(){x =2},这个y是一个全局变量,y作为参数传给了foo,那么在foo中重新定义了x,没有赋值,此时x为undefined.当你再调用y函数的时候,x用的是let定义的x,为1; 紧接着,你把2赋给了x,此时let定义的x为多少都不影响最终x为2;

第二个:那就比较清晰了,不管let定义x为多少,当你执行foo函数,再执行y函数时,这里x被重新定义为2,那么之后你使用x都是2了。至于y之前是undefined,道理同一,定义后未初始化变量,均为undefined。

能给好评吗TT

收获园豆:10
铁柱成针 | 小虾三级 |园豆:614 | 2017-11-08 09:47

多谢,清晰明白,是我一开始想错方向了

刘冰0117 | 园豆:102 (初学一级) | 2017-11-08 11:21

@刘冰0117: 不客气~

铁柱成针 | 园豆:614 (小虾三级) | 2017-11-08 11:33
其他回答(2)
0

确定第一个执行到y的时候x的值是1?在执行y之前log一下看到的是undefined啊?

hehe_54321 | 园豆:750 (小虾三级) | 2017-11-08 08:20

你再chrome里面打断点试一下

支持(0) 反对(0) 刘冰0117 | 园豆:102 (初学一级) | 2017-11-08 11:01

@刘冰0117: 不好意思,问一下,你是说y里面还是y前面

支持(0) 反对(0) hehe_54321 | 园豆:750 (小虾三级) | 2017-11-08 12:34
0

1,var会变量提升,既函数会最先执行var x的语句,不管位于哪里,且var是全局作用域,2,而let是快作用域,并且没有变量提升,3,函数内部是单独的作用域;两者的区别可以看https://www.cnblogs.com/mrzhou1944/p/14259674.html

笙烛 | 园豆:204 (菜鸟二级) | 2021-01-13 09:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册