1)函数声明(Function Declaration);

    // 函数声明function funDeclaration(type){return type==="Declaration";}

  

2)函数表达式(Function Expression)。

    // 函数表达式var funExpression = function(type){return type==="Expression";}

Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。这个微小的区别,可能会导致JS代码出现意想不到的bug,让你陷入莫名的陷阱中。如下代码:

1     funDeclaration("Declaration");//=> true
2     function funDeclaration(type){
3         return type==="Declaration";
4     }

1     funExpression("Expression");//=>error
2     var funExpression = function(type){
3         return type==="Expression";
4     }

出现上面的错误是因为用函数声明创建的函数可以在函数解析后调用(解析时进行等逻辑处理);而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用。其本质原因体现在这两种类型在Javascript function hoisting(函数提升)和运行时机(解析时/运行时)上的差异。

上面两段代码的函数提升可示意为下图:


代码1段JS函数等同于:
    function funDeclaration(type){return type==="Declaration";}funDeclaration("Declaration");//=> true

代码2段JS函数等同于:
    var funExpression;funExpression("Expression");//==>errorfunExpression = function(type){return type==="Expression";}

转载于:https://www.cnblogs.com/xbj-2016/p/5903611.html

JavaScript的函数声明与函数表达式的区别相关推荐

  1. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  2. Javascript 函数声明和函数表达式的区别

    2019独角兽企业重金招聘Python工程师标准>>> Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实 ...

  3. JavaScript程序开发(十四)—函数声明与函数表达式

    函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的.解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问):至于函数表达式,则必须等到解析 ...

  4. Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结

    一切起源于一段代码(近来学完java基础 开始学习敲一下javascript): var getter = function(){var dayNames=["Sunday",&q ...

  5. javascript函数声明和函数表达式

    JavaScript中定义函数最常用的方式是函数声明和函数表达式.这两种技术非常相似,有时甚至难以区分,但在后续章节中可以看到,它们之间还是存在着微妙的区别. JavaScript定义函数最基本方式是 ...

  6. javascript 函数声明与函数表达式的区别

    还是一样,先上代码: <script>var f = function g() {return 1;};if (false) {f = function g(){return 2;};}a ...

  7. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  8. 函数声明、函数表达式、匿名函数、立即执行函数

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  9. JS中的函数声明和函数表达式

    JS中的函数声明和函数表达式 1. 函数声明定义一个具有指定参数的函数 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用 hoist ...

最新文章

  1. 低复杂度 - 服务网格的下一站
  2. python学习笔记-Day17(jinja2)
  3. Android面试题目之五: 算法题--嵌套的信封
  4. java绘图机器猫_用绘图语句画机器猫(初学 C 语言的同学必看)
  5. 2011年100佳精美的WordPress免费博客模板
  6. 使用ALV中输出ICON
  7. 在IIS中启用父路径,不被黑客利用
  8. 2019五个最棒的机器学习课程
  9. skywalking使用mysql_聊聊skywalking的mysql-plugin
  10. linux ntp server配置文件,Linux下配置ntp server
  11. VMware vCenter Server 的内部版本号和版本 (2143838)
  12. Problem Statement
  13. 蒙特卡洛粒子滤波定位算法_基于粒子滤波的TBD算法仿真—MATLAB仿真
  14. 黄聪:wordpress教程
  15. 会话推荐和 序列推荐
  16. Excel VBA(Visual Basic)编程入门
  17. sql盲注特点_sql盲注
  18. WCF 项目应用连载[9] - 契约中的委托 事件参数处理
  19. LPDDR5 JEDEC
  20. [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升————(2021.6.13学习笔记)

热门文章

  1. SqlServer-函数
  2. 篮球战术谈之1-2-2进攻法
  3. git 基础 tag 打标签
  4. ios 自定义圆环进度条
  5. webpack安装报错(Unexpected end of JSON input while parsing near '...e6139ad7957,tarball')
  6. 中年程序员对核心竞争力“不可替代”的重新认识
  7. 如何让DIV模块随着页面固定和不固定
  8. .NET采集数据,放入数据库总结
  9. tomcat增加处理线程数量
  10. ROSE User Case View