美文网首页IT修真院-前端
函数表达式跟函数声明的区别

函数表达式跟函数声明的区别

作者: 狗富贵互相汪 | 来源:发表于2017-11-22 20:25 被阅读205次

大家好,我是IT修真院武汉第10期学员,一枚正直、纯洁、善良的前端程序员。

今天给大家分享一下,修真院官网任务js-2,深度思考的知识点——函数表达式跟函数声明的区别;


1.背景介绍

    什么是 Function Declaration(函数声明)?

Function Declaration 可以定义命名的函数变量,而无需给变量赋值。Function Declaration 是一种独立的结构,不能嵌套在非功能模块中。可以将它类比为 Variable Declaration(变量声明)。就像 Variable Declaration 必须以“var”开头一样,Function Declaration 必须以“function”开头。

    什么是 Function Expression(函数表达式)?

Function Expression 将函数定义为表达式语句(通常是变量赋值)的一部分。通过 Function Expression 定义的函数可以是命名的,也可以是匿名的。Function Expression 不能以“function”开头(下面自调用的例子要用括号将其括起来)。


2.知识剖析

函数声明实例 函数声明实际执行顺序 函数表达式实际执行顺序 函数表达式实例            

        函数表达式跟变量一样,有一个var为头的名字,后面跟一个匿名函数,然后在后面调用这个变量名+()就可以调用这个函数了。在浏览器的渲染机制下,变量名get hoisted(被提升),赋值为undefined,然后浏览器再进行赋值。但是后面的函数依然按实际顺序执行,所以后面的c为2的函数获取不到了,因为函数已经return了;


3.常见问题

    函数表达式创建的函数大多是匿名的。在代码调试的时候比较麻烦;

4.解决方案

    建议使用 Named Function Expressions

 Named Function Expressions (命名函数表达式) 

5.编码实战

6.扩展思考

    哪些地方不能用函数声明?

            官方是禁止在非功能模块(比如 if)中使用函数声明的。但是所有浏览器都支持,但是各自的解释方式不同。

7.参考文献

            函数申明与函数表达式的区别

8.更多讨论

详情请看:

视频链接

PPT链接

问:Function Expression 会被提升吗?

答:这取决于表达式。

问:应该注意什么?

答:官方是禁止在非功能模块(比如 if)中使用 Function Declaration 的。但是所有浏览器都支持,但是各自的解释方式不同。

问:还有其它理由支持 Function Expression 的吗?

答:1)Function Declaration 感觉像是要模仿 Java 风格的方法声明,但是 Java 方法和 JavaScript 并不一样。在 JavaScript 中,函数是含值的 living 对象。Java 方法仅是对元数据的存储。下面的两段代码都定义了函数,但是只有 Function Expression 看着像创建了对象。

2)Function Expression 用处更多。Function Declaration 只能作为“statement”孤立存在。它所能做的就是创建一个当前作用域下的对象变量。相比之下,Function Expression(根据定义)是大型结构的一部分。如果想要创建匿名函数、给 prototype(原型)添加函数或是将函数用作其它对象的 property(属性),都可以用 Function Expression。每当用高阶应用,比如currycompose,创建新的函数时都是在用 Function Expression。Function Expression 和 Functional Programming(函数式编程)分不开。

相关文章

  • 函数

    函数声明和函数表达式有什么区别 函数声明 函数表达式 函数声明和函数表达式的区别: 函数声明必须给定函数名称,函数...

  • web前端-js小记(3)-函数及作用域

    1. 函数声明和函数表达式有什么区别 函数声明 函数表达式 区别:函数声明不用把声明放到函数调用的前面,函数表达式...

  • 饥人谷-任务十七

    一、函数声明和函数表达式有什么区别 (*) 主要区别函数声明会有声明提升,而函数表达式的规则跟变量一样。例:源码:...

  • 函数

    一、函数声明和函数表达式有什么区别 函数声明: 函数表达式: 区别:在于函数声明前置的不同,函数声明是整个函数前置...

  • 函数与作用域

    函数声明和函数表达式有什么区别 函数声明 函数表达式 区别 函数表达式结束后需要加;表示声明变量结束。 函数表达式...

  • JS函数

    1.函数声明和函数表达式有什么区别 声明函数使用function可以声明一个函数 函数表达式 区别声明函数声明不用...

  • 进阶任务三

    1.函数声明和函数表达式有什么区别 函数声明 函数表达式 区别: 函数调用可以发生在函数声明之前,不能在函数表达式...

  • 函数与作用域

    函数声明和函数表达式有什么区别 函数声明 使用function关键字可以声明一个函数 函数表达式 区别 函数声明:...

  • JS函数与作用域

    1.函数声明和函数表达式有什么区别 函数声明: 函数表达式: 区别: 使用函数声明方式定义的函数,可以在声明前调用...

  • 函数与作用域

    1. 函数声明和函数表达式有什么区别 函数声明和函数表达式都是声明函数的方式 区别1 写法:函数声明 : fu...

网友评论

    本文标题:函数表达式跟函数声明的区别

    本文链接:https://www.haomeiwen.com/subject/tsbovxtx.html