每日一题(二四)function getName(){for(let i=0;i5;i++){setTimeout(_=>{console.log(i)},i*10)}return{name:'a'}

题目描述:写出打印结果,并解释为什么

function getName(){
    for(let i=0;i<5;i++){
        setTimeout(_=>{
            console.log(i)
        },i*1000)
    }
    return 
        {
            name:'aaa'
        }
}

console.log(getName())

答案:

undefined
0
1
2
3
4

解析:

1.第一点:undefined,这是因为 return 语句后面换行了,js 会在return 语句后面自动添加分号。分号自动添加的情况:

  • 如果下一行的开始与本行的结尾连在一起解释,JavaScript 就不会自动添加分号
  • 只有下一行的开始与本行的结尾无法连在一起解释,JavaScript 引擎才会自动添加分号
  • 如果一行的起首是 ++ 或 -- 运算符,则他们后面自动添加分号
  • 如果 continue break return throw 这四个语句后面,直接跟换行符,则会自动添加分号

2.第二点:let 变量除了作用域是在 for 区块中,而且会为每次循环执行建立新的词法环境,因为是用 let 声明的,所以每个 i 都是一个作用域,这里如果用 var 声明则最后输出都是 5

扩展:

function getName(){
    for(var i=0;i<5;i++){
        setTimeout(_=>{
            console.log(i)
        },i*1000)
    }
    return {
        name:'aaa'
    }
}

console.log(getName())

答案:

undefined
5
5
5
5
5

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值