JS函数
2018-07-22 本文已影响0人
前往圣所的地方
什么是函数?
用来实现一种 功能 的 方法
函数的创建过程
- 首先会在当前作用域中声明一个函数名(声明的函数名和使用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执行到这里它所在的代码才会被执行
- 构造函数
var sum3=New Function("参数1","参数2","return console.log("Jay")");
其实这也是一个函数表达式。一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。
深入了解JavaScript闭包和原型链,这里走