一.函数的概念
JavaScript中的函数也是一个对象,使用typeof检查一个函数对象时,会返回function
二.函数的定义
- 赋值式定义 var fn = function () {}
02. 声明式定义 function() {}
声明式与赋值式的区别
- 书写不同
- 打印时, 声明式 会带上函数名, 赋值式没有
- 调用时有差异 声明式: 可以在函数定义前 调用 赋值式:不可以 (浏览器 做 变量提升) var fn; (这一行会在当前最开始的哪一行, 第一行) fn() // fn is not a function (原因在于, 此时 fn 经过变量提升后, 有 fn, 但 值为 undefined) fn = function () { console.log(222) }
三.函数的调用
语法: 函数名()
四.函数的参数
分为实参和形参
实参:调用函数时的小括号内部书写的值, 就是实参, 实参与形参为 一一对应的关系
形参:函数名后(function) 后边的小括号内部, 每书写一个 就相当于在函数内部声明一个变量, 可以在函数内部去调用
#五. 函数的返回值
01. 可以使用 return 来设置函数的返回值,return后的值将会作为函数的执行结果返回,可以定义一个变量,来接收该结果
02. 函数中return后的语句都不会执行
- 如果return语句后不跟任何值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined,return后可以跟任意类型的值
六.函数的预解析(和变量重名时的情况)
- 函数的预解析, 遇上同名变量的变量提升 直接以函数为主
- 预解析之后会把函数提升到当前作用域最顶层
- 在 JS 中 只有变量和函数才会有预解析(提升)
七.作用域
作用域指一个变量的作用的范围,在JS中一共有两种作用域:
- 全局作用域
- 直接编写在script标签中的代码,是全局作用域
- 在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
- 全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到
- 局部作用域
- 只在调用时使用
- 每调用一次函数就会创建一个新的函数作用域,之间互相独立
- 在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量