在JS中,函数就是一个方法(一个功能体),基于函数一般都是为了实现某个功能。
var total = 10;
total+=10;
total = total/2;
total = total.toFixed(2); //=>保留小数点后边两位(数字由一个方法toFixed用来保留小数点后面的两位数)
....
在后续的代码中,我们依然想实现相同的操作(加10除以2),我们需要重新编写代码
var total = 10;
total+=10;
total = total/2;
total = total.toFixed(2);
....
这样的方式会导致页面中存在大量冗余的代码,也降低了开发的效率,如果我们能把实现这个功能的代码进行“封装”,
后期需要这个功能执行即可,这样就好了!
函数诞生的目的几乎是为了实现封装:把实现一个功能的代码封装到一个函数中,后期想要实现这个功能,只需要把函数执行即可,不必要再次编写重复的代码,起到**低耦合高内聚(减少页面中的冗余代码,提高代码的重复使用率)**的作用
function fn() {
var total = 10;
total += 10;
total/=2;
total = total.toFixed(2);
console.log(total);
}
fn();
fn();
....
想用多少次,我们就执行多少次函数即可
=====
ES3标准中:
//=>创建函数
function 函数名([参数]){
函数体:实现功能的JS代码
}
//=>把函数执行
函数名();
=====
ES6标准中创建箭头函数:
let 函数名(变量名)=([参数])=>{
函数体
}
函数名();
let fn=()=>{
let total = 10;
...
};
fn();
函数作为引用数据类型中的一种,它也是按照引用地址来操作的,接下来我们学习一下函数的运行机制:
function fn(){
var total = 10;
total += 10;
total = total.toFixed(2);
console.log(total);
}
fn();
【创建函数】
1、函数也是引用类型,首先会开辟一个新的堆内存,把函数体中的代码当做“字符串”存储到内存中(对象向内存
中存储的是键值对)
2、把开辟的堆内存地址赋值给函数名(变量名)
此时我们输出fn(切记不是fn())代表当前函数本身
如果我们执行fn(),这是把函数执行
所以是否加小括号是两种不同本质的操作
【函数执行】
目的:把之前存储到堆内存中的代码字符串变为真正的JS代码自上而下执行,从而实现应有的功能
1、函数执行,首先会形成一个私有的作用域(一个供代码执行的环境,也是一个栈内存)
2、把之前在堆内存中存储的字符串复制一份过来,变为真正的JS代码,在新开辟的作用域中自上而下执行