JS函数

什么是函数?

用来实现一种 功能方法

函数的创建过程

  • 首先会在当前作用域中声明一个函数名(声明的函数名和使用var 声明的变量名是一样的。比如var sum;function sum(){};这两个名字算重复)
  • 浏览器会开辟一块内存空间(分配一个16进制的地址),将函数体内的JS代码以字符串的形式存储在内存空间中
  • 把内存空间的地址赋值给刚刚声明的那个函数名


    创建过程.png

函数执行的过程

  • 首先浏览器会开辟一块新的内存空间(函数作用域)
  • 形参赋值
  • 变量提升
  • 将函数名引用地址里储存的JS字符串拿到函数作用域,把它们变成JS表达式,从上到下执行


    执行过程.png

创建函数的方式

1.函数声明

function sum1(){
    //函数体
    //实现某一功能的 js代码
}

2.函数表达式(字面量)

var sum2=function(){
    //函数体
    //实现某一功能的 js代码
}

两种声明方式有什么区别呢?举个例子:

sum1(); //JJ
sum2;// ""
sum2();//报错,name is not a functinon
function sum1(){
     console.log("JJ");
}
var sum2=function(){//这里只会将name这个变量声明提前,变量赋值不提前
      console.log("GD");
};

在js预解析的过程中,有变量的声明提前,函数也有声明提前。用函数声明的方式创建函数,函数声明提前,解析器会预先读取函数声明;而函数表达式,只有js执行到这里它所在的代码才会被执行

  1. 构造函数
    var sum3=New Function("参数1","参数2","return console.log("Jay")");

其实这也是一个函数表达式。一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。

深入了解JavaScript闭包和原型链,这里走

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容