为了账号安全,请及时绑定邮箱和手机立即绑定

这两种声明方法的区别是什么

这两种声明方法的区别是什么

哈士奇WWW 2018-10-11 14:15:13
// 函数声明语句{  let a = 'secret';  function f() {    return a;   } }// 函数表达式{  let a = 'secret';  let f = function () {    return a;   }; }
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

ES6环境下的let变量声明

// 函数声明语句{  let a = 'secret';  function f() {    return a;
  }
}
f();//secret

在语句块中声明了一个变量a和一个函数f,其中变量a使用了let关键字,说明它是一个局部变量,作用域在其所在的语句块中,而函数f的作用域为全局的,在语句块的外面可以访问。又因为闭包的关系,函数f使用到的变量指向let a。

这个和如下代码是不同的

{
  let a = 'secret';
}function f() {
    return a;
}f();//Uncaught ReferenceError: a

对于下面的代码:

// 函数表达式{  let a = 'secret';  let f = function () {    return a;
  };
}
f();//Uncaught ReferenceError: f

在语句块中声明了变量a和函数f,在语句块的外面不能访问函数变量f

// 函数表达式{  let a = 'secret';  let f = function () {    return a;
  };
  f()://secret}


查看完整回答
反对 回复 2018-11-16
  • 1 回答
  • 0 关注
  • 481 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信