JavaScript | 函数定义的两种方法;预编译与执行

HTML5学堂(码匠):在JavaScript当中,函数的定义有两种常见方法,这两种方法有何不同?与这种不同点息息相关的“预编译与执行”又是什么意思?

1.如何定义函数

方法1:函数声明

方法2:函数表达式,又叫函数字面量

2.声明函数的代码实例

2.1.函数声明

基本语法

function functionName(arg0, arg1, ..., argn) {
    // 函数体 - HTML5学堂
}

代码范例

2.2.函数表达式(函数字面量)

基本语法

var functionName = function(arg0, arg1, ..., argn) {
    // 函数体 - HTML5学堂
};

代码范例

3.两种声明方法的不同点比较

在JavaScript运行过程中分为编译和执行两个阶段,在编译阶段解析器会先读取函数声明,并使其在执行任何代码之前可以访问;

因此,对于“函数声明”,在执行代码之前,函数就会先被读取,因此,在开发时可以把函数声明放在调用语句的后面

但是,对于“函数表达式”,则必须等到执行阶段解析器执行到它所在的代码行时,才会真正被解释执行

相关知识 - 预编译与执行

预编译期与执行期

JS的解析过程分为两个阶段:预编译期与执行期。

预编译期JS会对本代码块中的所有声明的变量(var声明的变量)和函数进行处理,但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但并不进行赋值

代码范例:

代码运行结果

undefined 'HTML5学堂(码匠)'

代码解析

预编译时,对声明的变量开辟了内存空间,但是没有赋值,所以变量里面的值是undefined。执行期的时候,代码是从上往下执行,没有对第一个username进行赋值,所以第一个username输出undefined。

第二个username会输出'HTML5学堂(码匠)',是因为代码执行到var a = 'HTML5学堂(码匠)'; 的时候为username进行赋值了,覆盖之前undefined的值。

Plus

JS引擎是按照代码块(<script></script>)来进行预处理和执行的,也就是说预处理的只是当前执行代码块的声明函数和变量。

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2017-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据钻研

JavaScript 知识点整理

JavaScript是按照ECMAScript标准设计和实现的,后文说的JavaScript语法其实是ES5的标准的实现。 先说说有哪些基础语法? 最基础语法有...

1995
来自专栏HTML5学堂

原生JS | 作用域

HTML5学堂-码匠:作用域那些必须掌握的知识,还有大量作用域案例练习与分析,快快进来! 作用域的基础知识 在JavaScript中,每个变量会有一个有效区域(...

3205
来自专栏青枫的专栏

c语言基础学习09_复合类型

============================================================================= 涉及...

621
来自专栏项勇

笔记10 | 学习整理静态static 和 终态final

1165
来自专栏大数据钻研

JavaScript 知识点整理

JavaScript是按照ECMAScript标准设计和实现的,后文说的JavaScript语法其实是ES5的标准的实现。 先说说有哪些基础语法? 最基础语法有...

2505
来自专栏技术博文

我的php命名规范

1.变量 所有字母都使用小写,使用'_'作为每个词的分界,如$user_name 2.函数 函数的命名使用小写字母和下划线的方式,如get_client_ip ...

2758
来自专栏前端那些事

RegExp正则匹配模式汇总

 正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法。对于极少数匹配模式是简单的全...

1896
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第8章 函数式编程(FP)(2)

好了亲,前文中我们在函数式编程的世界里遨游了一番,现在我们把思绪收回来,放到在Kotlin中的函数式编程中来。

712
来自专栏pangguoming

JavaScript的IIFE(即时执行方法)

前面的话   严格来讲,IIFE并不是闭包,因为它并不满足函数成为闭包的三个条件。但一般地,人们认为IIFE就是闭包,毕竟闭包有多个定义。本文将详细介绍IIFE...

2795
来自专栏PhpZendo

你玩转 JavaScript ES6 (六) – Map 映射

本章我们讲学习 ES6 中的 Map(映射)。上一章节我们学习了 [Set(集合)]()的相关内容,如果说 Set 类似于数组,那么 Map 就类似于对象。

751

扫码关注云+社区