函数的基础
函数: 把实现相同功能的代码放到一个函数体中,当想实现这个功能时,直接执行这个函数即可;减少了的冗余;高内聚,低耦合--> 函数的封装;
函数:引用数据类型;var a = 10; function : 关键字:声明定义一个函数; function 函数名(){} function : 功能;方法;函数分为定义和执行;
function fn1() { console.log(100); }函数执行; 让里面的代码运行;
fn1(); console.log(200);
function sum(num1,num2) {// 形参; var total = Number((num1+num2).toFixed(2)); console.log(total); } sum(12.8349,13.9417); sum(102.349,131.97); sum(1,1.09938);
函数的核心原理
函数分为两部分: 定义和执行;
function fn() { var a = {} a.b = 10; console.log(1); }
函数属于引用数据类型;空间地址类型
- 会开辟一个新的空间地址;
- 把函数体中的代码当做字符串存储到堆内存中;
- 把空间地址赋值给函数名;
console.log(fn);// 整个函数; fn()// fn is not a function;
堆栈内存:
当浏览器加载页面时,会形成两个虚拟的内存;一个栈内存,堆内存;
栈内存: 1) 提供代码的运行环境; 2) : 存储基本数据类型;
堆内存: 存储引用数据类型;
函数的执行
fn();
1.首先会形成一个私有的作用域
2.形参赋值
3.变量提升
4.代码从上到下运行;
5.作用域的销毁;
函数的形参和实参
在函数括号中的参数是形参
var num = 10; function sum(num1,num2) {//函数的入口; console.log(num1);// 1 console.log(num2);// 2 }
如果有形参,没有对应的实参,那么形参默认存储的值是undefined;形参属于私有变量; 只存在当前的作用域下;在函数体中被var 也是私有变量;num1=100;var a=101;函数执行时传的参数是实参;
sum(1,2,3); sum(10,20); sum(num); console.log(num); console.log(num1); console.log(a);
在函数执行时,函数体中可以找到函数外面的变量;但是函数外面不能访问里面的变量;
当函数执行时,首先会形成一个私有的作用域,这个私有作用域保护了里面的私有变量不受外界的干扰;这种机制--> "闭包";
函数的arguments
arguments 类数组对象
function sum() { // arguments : 函数天生自带实参参数集合 // 是一个对象数据类型的,不是数组 // []: 集合; console.log(arguments instanceof Array); var total = 0; for(var i=0;i<7;i++){ total += arguments[i]; } console.log(total); } sum(1,2,3,4,58,99,100);
函数的return
return 语句会终止函数的执行并返回函数的值。function 入口 形参实参;函数的出口 returnreturn 后面跟着的内容就是函数的返回值;
function sum() { var total =0; for(var i =0;i<arguments.length;i++){ if(typeof arguments[i]==="number"){ if(!isNaN(arguments[i])){ total += arguments[i]; } } } console.log(100) return total; console.log(200); } console.log(sum("1", 199, 10, "12px", true, [], 19, NaN)); // 函数名() : 代表函数返回值; 函数体中return出来的; // return: 结束整个函数;下面的代码不再运行;
函数名() : 代表函数返回值; 函数体中return出来的;return: 结束整个函数;下面的代码不再运行;如果函数没有return;那么函数默认返回undefined;
var newSum = sum("1",199,10,"12px",true,[],19,NaN); console.log(newSum);
函数的匿名函数
匿名函数: 没有名字的函数;把等号右边的函数的 空间地址赋值给变量f;
: 匿名函数 function fn() { } 函数表达式; var f = function () { console.log(1) } f(); 自执行函数 ;自执行函数: 自己运行; (function (m,n) { console.log(1) console.log(m); console.log(n); })(); !function () {}(); +function () {}(); -function () {}(); ~function () {}();
function f() { console.log(100); return 100; } var a = f(); console.log(f());// 100;
匿名函数就是没有名字的函数; 函数表达式 和 自执行函数
//=>把一个没有名字的函数(有名字也无所谓)作为值赋值给一个变量或者一个元素的某个事件等:· 函数表达式· oBox.onclick = function(){} //=>创建函数和执行函数放在一起了,创建完成立马执行:·自执行函数· ;(function(n){})(10); //=>以下都是自执行函数,符号只是控制语法规范 ~function(n){}(10); -function(n){}(10); +function(n){}(10); !function(n){}(10);