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 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python语言中list及tuple的使用示例

Python语言中的list Python有一种内置数据类型被称为列表:list。 1.list基本定义 list是一种有序的集合,可以随时添加和删除其中的元...

3007
来自专栏null的专栏

python基础知识——基本语法

在python基础知识这个系列中,准备罗列出我学习python的一些基础知识,包括: 基本语法 控制语句 内置数据结构 模块和函数 字符串 文件处理 面向对象 ...

3518
来自专栏mukekeheart的iOS之旅

《JavaScript高级程序设计》学习笔记(1)

欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。 首先,我将从《JavaScript高级程序设计》这本JavaScript学习者必看...

2604
来自专栏林德熙的博客

正则表达式30分钟入门教程

30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。

200
来自专栏python学习之旅

Python笔记(十七):生成器

Python生成器是创建迭代器的简单方法。简单来说,生成器是一个函数,它返回一个我们可以迭代的对象(迭代器)(一次一个值)。

441
来自专栏小樱的经验随笔

【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别

第一种:for循环  循环结构for语句的格式:         for(初始化表达式;条件表达式;循环后的操作表达式) {      循环体;     ...

2687
来自专栏Crossin的编程教室

【Python 第52课】 元组

上一次pygame的课中有这样一行代码: x, y = pygame.mouse.get_pos() 这个函数返回的其实是一个“元组”,今天我们来讲讲这个东西。...

3197
来自专栏King_3的技术专栏

leetcode-22-括号生成

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

692
来自专栏CDA数据分析师

超能教程 十分钟学会 Python!

假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程。那么本教程将花费十分钟的时间带你走入Python的大门。本文的内容介于教程(Totur...

1866
来自专栏coding for love

JS入门难点解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

542

扫描关注云+社区