概述

函数就是一段可以反复调用的代码块。
函数还能接受输入的参数,不同的参数会返回不同的值。
image.png

基本使用

函数的声明及调用

函数声明
image.png
image.png
递归调用
image.png

函数的参数及返回值

在函数中,参数一共有两种形式:函数的形参、函数的实参
形参:在函数定义时所指定的参数,就称之为“形参”
实参:在函数调用时所指定的参数,就称之为“实参”
函数体内部的return语句,表示将数据返回给调用者;
image.png

子调用匿名函数

image.png

作用域

定义

前面讲过,var关键字就是在声明变量,如果不使用var则会污染全局变量;为什么会污染全局变量呢?
这是因为JS中变量作用域的问题而导致的;作用域指的是变量存在的范围;Javascript有两种作用域:
一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;变量也被称为全局变量
另一种是函数作用域,变量只在函数内部存在。称为局部变量;在函数内部,使用var声明的变量只能在函数内部使用,是局部变量,而在其他区块中声明,一律都是全局变量;
此时,仍然没有解释,为什么不适用var会污染全局变量呢?
在函数内部定义的变量,外部无法读取,称为局部变量
image.png
image.png

变量提升

image.png

函数作用域

image.png
image.png

词法分析

JS代码的编译及运行

image.png
image.png
同样出现错误,为什么两段代码的执行结果是不一样的?代码在运行时,共分为两个阶段:编译阶段、执行阶段编译阶段:声明变量、声明函数(display)、语法检查(报错)等…
执行阶段:变量的购值、函数的调用、代码的执行等都是发生在执行阶段
编译阶段出错无法进入执行阶段
因此,第二段代码中,没有任何输出;

script代码段

script代码段虽然在一个页面中,但是,
script代码段并不是一起执行的,而是分开解析与执行的。
1、JS解析引繁,从上而下读取第一个script代码段
2、放入内存
3、编译阶段:声明变量、声明函数(display)、语法检查(报错)
4、执行阶段:变量的赋值、函数的调用、代码的执行
5、在读取下一个script代码段
放入内存
编译阶段
执行阶段
image.png