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>)来进行预处理和执行的,也就是说预处理的只是当前执行代码块的声明函数和变量。
- 快速入门系列--CLR--01基本概念
- 区块链技术的DOS阶段——智能合约上
- mmc如何管理本机上的(数字/x.509)证书
- Jquery $.extend的重载方法详述
- Jquery ajax调用后台aspx后台文件方法(不是ashx)
- [原创]x.509证书在WCF中的应用(CS篇)
- tomcat
- 快速入门系列--WebAPI--01基础
- 分析程序员到底是不是吃青春饭
- Jquery dom搜索之siblings()方法
- 汽车黑科技!想想以后不是我们亲自驾驶汽车还是蛮开心的
- 快速入门系列--CLR--02多线程
- JavaScript之将JS代码放在什么位置最合适
- 快速入门系列--TSQL-01基础概念
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 全方位了解协程概念
- leetcode MySQL 实现交换工资问题
- leetcode: explore-array-31 旋转矩阵
- Python 内置模块:logging 官方基础教程翻译
- leetcode: explore-array-21 从排序数组中删除重复项
- leetcode: explore-array-22 买卖股票的最佳时机 II
- leetcode: explore-strings-32 反转字符串
- leetcode: explore-strings-33 反转字符串
- 02-leetcode: explore-strings-34 字符串中的第一个唯一字符
- 《操作系统》:理解一些基础概念
- Json与对象相互转换 - alibaba fastjson
- 2020-08-21
- Kubernetes Dashboard 与 LDAP 的集成
- Grafana Loki 简明教程
- 深度学习中7种最优化算法的可视化与理解