美文网首页
总结一下js的函数类型

总结一下js的函数类型

作者: Willworkgogogo | 来源:发表于2018-04-29 00:07 被阅读0次

    几个概念

    1. 在js中,函数就是个对象
    2. 函数名就是个指向函数对象的指针

    函数的三种声明方式

    1. 函数声明
       // 语法
       function sayName(name) {
        console.log(name)
       }
    
    1. 函数表达式
      // 语法
      var  sayName = function(name){
        console.log(name)
      }
    
    1. 使用Fuction构造函数生成实例
      // 前面都是函数参数,最后一个字符串参数表示函数体
      var sum = new Function("num1", "num2", "num1+num2")
      // 不推荐的原因:
      // 1. 需要两层解析,一是函数解析,而是对内部字符串的解析,耗性能
      // 1. 书写麻烦,函数体还不能写复杂
    

    函数声明和函数表达式的区别

    要理解它们的区别,先要知道几个概念

    1. 解析器,就是对js源码进行一定规则解析,然后交给执行环境执行
    2. 执行环境,js源码真正运行的环境

    js解析器的规则有点特殊,有两个提升

    1. 变量提升,源码中声明的变量会被被解析器提取出来,在源码逐行执行前被执行,此时变量会被赋值为undefined
    2. 声明函数提升,声明函数会被整体提升到代码执行前,所以在声明函数之前就调用该函数,是不会报错的,因为该函数已经被提升到执行环境的头部了

    总结:

    1. 函数表达式,只会提升它的变量,该变量为undefined,只有当代码执行该函数所在的位置时,该变量才会被真正指向该函数。所以在函数表达式之前的调用,都会导致脚本报错
    2. 声明函数会被提升,提前引用不会报错

    函数的属性和方法

    1. 内部属性this和arguments
      1. this,表示调用函数的对象的引用
      2. arguments,函数参数组合而成的类数组
      3. arguments.callee,该属性指向该函数,做递归的时候很好用
    2. 函数本身的属性和方法
      1. length, 返回函数参数的个数
      2. apply()、call()、bind(), 用于函数继承并修改内部this指向,详情可以看我的另一篇介绍,蛮简单的。传送门

    相关文章

      网友评论

          本文标题:总结一下js的函数类型

          本文链接:https://www.haomeiwen.com/subject/bzynlftx.html