JavaScript块级作用域的变量声明和函数声明

本文探讨JavaScript中的块级作用域,分析默认变量与var声明的变量在块级作用域和全局作用域的行为差异。同时,解释函数声明在块级作用域中的提升机制,以及同名变量和函数声明如何相互影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在一个讨论群看到一个面试题:

{
  a = 10;
  function a(){};
  console.log(a)//10
};
console.log(a);//10

what?不应该是:function a(){} 、function a(){} 吗?

最后一位牛人给出了他的理解,这里本人只是作出验证,加深理解。

环境默认都是chrome环境,支持ES6。
下文提出的默认变量指的是没有使用 var、let、const定义的变量。
块级作用域的默认变量
我们先看这样一个 :

console.log(a);//ReferenceError: a is not defined
{
    a = 10;
    console.log(a)//10
}
console.log(a);//10

可能有些人会像我一样感到诧异:为什么第一个a打印出来的不是undefined?a = 10默认不是 var a = 10吗?应该会提升到全局作用域的顶端的啊。

那好,让我们把window.a打印出来看看:

console.log(window.a);//undefined
{
  console.log(window.a,a);//undefined  、a is not defined
    a = 10;
    console.log(window.a,a)//10 10
}
console.log(window.a,a);//10 10

结论:我们可以清晰的看到,在块级作用域中默认声明的变量,只有执行了声明代码,变量才会被挂载到全局作用域上。

让我们在看看使用var声明的变量的情况:

console.log(window.a,a);//undefined  undefined
{
  console.log(window.a,a);//undefined  、undefined
    var a = 10;
    console.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值