javascript函数+闭包+立即执行函数

javascript知识点
0 == undefined false
0 == null false
函数中的隐藏数组arguments
函数
定义函数声明
function 函数名(形参)
{
函数体
}
函数名( 形参);
函数表达式
1.命名函数表达式
例: var demo = function demo1( )
{
函数体
}
demo();
2.匿名函数表达式—>

javascript

知识点

  • 0 == undefined false
  • 0 == null false
  • 函数中的隐藏数组arguments

函数

  1. 定义

    • 函数声明
      function 函数名(形参)
      {
      函数体
      }
      函数名( 形参);
    • 函数表达式
      1.命名函数表达式
      例: var demo = function demo1( )
      {
      函数体
      }
      demo();
      2.匿名函数表达式—>函数表达式
      例: var text = function( )
      {
      函数体
      }
  2. 组成形式

    • 函数名称
    • 参数->形参`实参
    • 返回值

作用域

  1. 作用域定义: 变量和函数生效的区域
  2. [[scope]]: 每一个javascript函数都是一个对象, 对象中有些属性我们可以访问, 但有些不可以, 这些属性仅供javascript引擎存取, [[scope]]就是其中一个. [[scope]]指的就是我们所说的作用域, 其中存储了运行期上下文的集合.
  3. 作用域链: [[scope]]中所存储的执行期上下文对象的集合, 这个集合呈链式链接, 我们把这种链式链接叫做作用域链.
  4. 运行期上下文: 当函数执行时, 会创建一个称为执行期上下文的内部对象, 一个执行期上下文定义了一个函数执行时的环境, 函数每次执行时对应的执行期上下文都是独一无二的, 所以多次调用一个函数会导致创建多个执行上下文, 当函数执行完毕, 它所产生的执行上下文被销毁.
  5. 查找变量: 从作用域链的顶端依次向下查找.
    例子: 作用域链
    例子

闭包

  • 当内部函数被保存到外部时, 将会生成一个闭包. 闭包会导致原有作用域链不释放, 造成内存泄漏.
  • ` function a()
    {

    function b()
    {
        c();
    }
    function c()
    {
        alert('a');
    }
    return b;
    

    }
    var demo = a();
    demo();`
    a执行 0{ b:(function), c:(function)}
    demo = b函数;
    b定义
    0.{ b: (function), c: (function)}
    1.go{}
    b执行 0 bA0
    1.{b :(funciton), c:(function)}
    2.go{};
    产生闭包之后a的执行期上下文被保存

  • 闭包的作用

    • 实现共用变量
      例:函数累加器例子
    • 可以做缓存
      例子
    • 可以实现封装, 属性私有化
    • 模块化开发, 防止污染全局变量

立即执行函数

  1. 定义: 此类函数没有声明, 在一次执行过后即释放. 适合做初始化工作.
  2. 格式:(function ( )
    {

    }( ))或者
    (function ( ) { } )( );—>立即执行函数
  3. 带参数的立即执行函数
    例:
    例子

闭包的防范

闭包会导致多个执行函数共有一个公有变量, 如果不是特殊需要, 应尽量防止这种情况的发生.
如果发生了闭包可以采用立即执行函数的形式.
例子

越来越多的平台(微信公众平台,新浪微博,简书,百度打赏等)支持打赏功能,付费阅读时代越来越近,特此增加了打赏功能,支持微信打赏和支付宝打赏。坚持原创技术分享,您的支持将鼓励我继续创作!