学会这几点,让你全面看清JS函数。

80 阅读2分钟

一.函数的概念

JavaScript中的函数也是一个对象,使用typeof检查一个函数对象时,会返回function

二.函数的定义

  1. 赋值式定义 var fn = function () {}

01.png 02. 声明式定义 function() {}

02.png

声明式与赋值式的区别

  1. 书写不同
  2. 打印时, 声明式 会带上函数名, 赋值式没有
  3. 调用时有差异 声明式: 可以在函数定义前 调用 赋值式:不可以 (浏览器 做 变量提升) var fn; (这一行会在当前最开始的哪一行, 第一行) fn() // fn is not a function (原因在于, 此时 fn 经过变量提升后, 有 fn, 但 值为 undefined) fn = function () { console.log(222) }

三.函数的调用

语法: 函数名()

d.png

四.函数的参数

分为实参和形参

实参:调用函数时的小括号内部书写的值, 就是实参, 实参与形参为 一一对应的关系

形参:函数名后(function) 后边的小括号内部, 每书写一个 就相当于在函数内部声明一个变量, 可以在函数内部去调用

s.png #五. 函数的返回值 01. 可以使用 return 来设置函数的返回值,return后的值将会作为函数的执行结果返回,可以定义一个变量,来接收该结果 02. 函数中return后的语句都不会执行

  1. 如果return语句后不跟任何值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined,return后可以跟任意类型的值

r.png

六.函数的预解析(和变量重名时的情况)

  1. 函数的预解析, 遇上同名变量的变量提升 直接以函数为主
  2. 预解析之后会把函数提升到当前作用域最顶层
  3. 在 JS 中 只有变量和函数才会有预解析(提升)

19674403d1253bb32f2d6f949d373cc.png

七.作用域

作用域指一个变量的作用的范围,在JS中一共有两种作用域:

  1. 全局作用域
    • 直接编写在script标签中的代码,是全局作用域
    • 在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
    • 全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到
  2. 局部作用域
    • 只在调用时使用
    • 每调用一次函数就会创建一个新的函数作用域,之间互相独立
    • 在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量

八.作用域链

qq.png