JavaScript函数的基本操作

155 阅读2分钟

函数的基本操作

  • 核心原理

    • 创建函数:堆内存
      • 首先在当前作用域声明一个函数名(var sum; function sum ;两个名字是重复的,不能这样声明)
      • 浏览器开辟一个新的内存空间(一个16进制的地址),把函数体中的代码当做普通字符串存储在这个内存空间(创建函数不执行,函数没有意义)
      • 内存空间的地址赋值给声明的函数名
    • 执行函数:栈内存
      • 首先,浏览器开辟一个新的 私有作用域
      • 形参赋值
      • 私有作用域中的变量提升
      • 把之前存储的JS代码字符串,拿到私有作用域中,把它们作为JS表达式从下到上执行
      • 私有作用域是否销毁的问题
    • 闭包:函数执行会形成一个私有的作用域,让里面的私有变量和外界互不影响,可以理解为私有作用域把私有变量保护起来,这种保护机制我们称为闭包
    • 堆内存:所有引用数据类型,存储的内容都在堆内存
    • 栈内存:作用域,提供JS代码执行的环境。对象会把键值对存储;函数把函数体当做字符串存储起来
  • 函数中的形参和实参

    • 形参:形参是个变量,用来存储和接收用户执行函数时,传递过来的值
    • 实参:执行函数 时传递给形参的具体值
  • arguments实参集合

    • 我们不清楚用户要传递几个值的时候,使用函数的内置方法arguments获取实参集合
    • arguments是一个类数组集合
    • length属性,存储当前传递实参的个数
    • callee存储的是当前函数本身
    • 现在项目大部分都是基于严格模式的"use strict" ; 严格模式不支持callee和callee.caller(即宿主环境,window下为null)
  • return 函数返回值

  • sum代表的是函数本身,sum()先让函数执行,代表函数返回的结果

  • 没有return或者只写了return;,返回undefined

  • 函数体中遇到return, return后面的代码就不执行了

  • 匿名函数

    • 没有名字的函数
  • 自执行函数

    • 创建完成之后就执行的函数
    • ;( function(){} ) () ;