zoukankan      html  css  js  c++  java
  • JavaScript函数

    普通函数

    function demo(args){
      // ...
    }
    

    箭头函数

    let demo = (args) => {
      // ...
    }
    

    普通函数与箭头函数的区别:

    • 普通函数中的this谁调用就指向谁;箭头函数的this是其父作用域。
    • 普通函数的this会被call / bind / apply等改变;箭头函数中的this不会被改变。

    匿名函数

    (function(){
     // ... 
    })();
    

    注意:

    • 匿名函数一般作为其它函数的形参、实参、返回值。
    • 匿名函数必须立即执行,不能只定义不执行。

    函数的扩展运算符

    function demo (...args){
      // ...
    }
    

    函数的扩展运算符将函数的实参打包成了一个数组,供开发人员操作。

    注意:函数的扩展运算符只能在所有形参的末尾。

    函数作用域

    作用域

    • 全局作用域:在所有{}以外的区域
    • 块级作用域:除了函数内部外,其它{}内的区域
    • 局部作用域:函数内部的区域

    不同作用域的区别

    • 全局作用域中,用varlet定义的变量都是全局变量
    • 块级作用域中,用var定义的变量是全局变量,用let定义的变量是局部变量
    • 局部作用域中,用varlet定义的变量都是局部变量

    注意:在定义是省略varlet的变量,无论在哪个作用域定义的都是全局变量

    函数预解析

    预解析:

    • 浏览器在执行 javascript 代码时不会直接按照顺序执行代码,而是加工之后执行
    • 浏览器在加工 javascript 代码时会分为两步: 先预解析再按照书写顺序执行其他代码,这个加工的过程称之为预解析

    预解析规则:

    • 直接使用function关键字定义的函数会被提升到这个js代码的顶部,无论在什么地方调用能够成功
    • 使用var定义变量并赋值的函数,由于var定能够以的变量存在变量提升,但赋值函数不会进行预解析,所以在函数定义之前调用变量值为undefined
    • 使用let定义变量并赋值的函数,由于let不存在变量提升,并且赋值函数不会进行预解析,所以在函数定义之前调用会报错

    闭包函数

    • 闭包函数是一种特殊的函数,当一个函数使用了外部函数的数据(变量、函数),内部函数就会形成闭包。

    • 闭包的两个条件:函数嵌套、内部函数使用外部函数数据。

    • 闭包特点:只要内部函数还在使用外部函数,外部函数被使用的数据就不会被立即释放,所以闭包就可以延长外部函数数据使用周期。

    • 注意:当后续不需要使用闭包时,一定要手动把闭包置为null,防止出现内存泄露

      let demo = () => {
          let num = 666;
          return () => {
              console.log(num);
          }
      }
      
      let fn = demo();
      fn(); // 666
      
      fn = null;
      
  • 相关阅读:
    C# 中 Struct 与 Class 的区别,以及两者的适用场合<转转转>
    <转>.NET Framework十年回顾 体积越小功能越强
    一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素
    在博客园已经一年多时间了,今天开通博客了!
    C#RSA非对称加解密
    无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
    JavaScript判断浏览器类型及版本(转)
    SQL Server 海量导入数据
    数据库管理方面必知语句(问答)(转)
    JS实现的购物车
  • 原文地址:https://www.cnblogs.com/luwenfeng/p/11688625.html
Copyright © 2011-2022 走看看