编程向导-JavaScript-基础语法-块语句

梦里繁花落尽,此情未央,此意难忘,弦虽断,曲犹扬。!

与技术共同呼吸,与程序员共命运。世树科技 承“技驱动,理致胜”理念、国风编程。

块语句

块语句(Block)用于组合零个或多个语句。该块由一对大括号 {} 界定,块内形成块级作用域,块作用域内定义的变量将在离开块作用域后立即被回收

{
  StatementList;
}

块级作用域

ES5 只有 全局作用域函数作用域,没有块级作用域,这带来很多不合理的场景:

  • 内层变量可能会覆盖外层变量
  • 用来计数的循环变量泄露为全局变量。

因此,ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。在 ES6 的块级作用域之中,函数声明语句的行为类似于 let,在块级作用域之外不可引用;但又有别于 let 命令,允许重复声明同名函数且存在函数变量提升。

块级作用域中的函数特征:

  • 允许在块级作用域内声明函数。
  • 函数声明类似于 var,即会提升到全局作用域或函数作用域的头部。
  • 内层作用域声明的函数不干扰外层作用域的函数。

var

通过 var 声明的变量没有块级作用域。在语句块里声明的变量作用域是其所在的函数或者 <script> 标签内,你可以在语句块外面访问到它。

换句话说,语句块不会生成一个新的作用域。尽管单独的语句块是合法的语句,但在 JavaScript 中你不会想使用单独的语句块,因为它们不像你想象的 C 或 Java 中的语句块那样处理事物。

var a = 1;
{
  var a = 2;
}
console.log(a); // 2

let 和 const

相比之下,使用 letconst 声明的变量是有块级作用域的。

let a = 1;
{
  let a = 2;
}
console.log(a); // 1
const a = 1;
{
  const a = 2;
}
console.log(a); // 1

注意块级作用域里的常量声明 const c = 2 并不会抛出 SyntaxError: Identifier 'a' has already been declared 这样的语法错误,因为这是一个新的作用域。

function

函数声明同样被限制在声明它的语句块内。

foo('outside'); // TypeError: foo is not a function
{
  function foo(location) {
    console.log('foo is called ' + location);
  }
  foo('inside'); // 'foo is called inside'
}
  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wtrees_松阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值