javascript - 这两种声明方法的区别是什么
PHP中文网
PHP中文网 2017-04-11 11:50:56
[JavaScript讨论组]
// 函数声明语句
{
  let a = 'secret';
  function f() {
    return a;
  }
}

// 函数表达式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}
PHP中文网
PHP中文网

认证0级讲师

全部回复(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
}
PHP中文网

一般函数和函数表达式的区别

PHPz
  1. 一个是函数声明,一个是表达式

  2. 一个是有名函数,一个是匿名函数

  3. 一个f.name属性是''(空字符串),一个是'f'

怪我咯

我觉得可以直接看MDN的函数表达式吧,简单来讲前者只是静态声明(不运行),后者是运行后将返回值存到变量里。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号