函数
1、基础知识:
function:函数,具备某个功能的一个方法,方法本身是没什么意义的,只有执行这个方法、实现了对应的功能才有价值。函数由两部分组成:创建一个函数,执行这个函数。创建一个函数,可以执行多次,一般情况下,每次执行函数和上一次执行没有任何的关系
创建一个函数:
(1).首先开辟一个新的内存空间,浏览器为其分配一个16进制的地址
(2).把函数体中的JS代码当作“字符串”存储到内存空间中
(3).再把这个地址赋值给当前的函数名
注:eg:sum;//sum后面不加小括号,代表的就是当前函数本身;sum();sum后面加小括号,代表的是执行当前函数sum()
执行一个函数:
目的:把函数之前存储的那些字符串变为JS代码,然后再让JS代码从上到下依次的执行
(1).当函数执行的时候,首先会提供一个供函数体中代码执行的环境-----”私有作用域“(图中,蓝、棕框均为私有作用域)
(2).把函数体中的代码字符串变为代码从上到下执行
注:函数执行的时候,首先会形成一个新的私有作用域,供函数体中的代码从上到下执行,形成的那个私有作用域,把我们函数体中的代码包起来了,保护了里面的私有变量不受外界的干扰(外面获取不到也修改不了),函数执行时形成的这种保护机制叫”闭包“
2、形参:
制定一个功能方法的时候,所需原材料并不知道,只需要暴露对应入口传递材料即可,所暴露的入口就是函数中的”形参“
执行的时候只需把对应形参的值传递给函数即可。定义了形参,执行的时候如果没有传递值,默认形参的值是undefined
3、return:
return就是当前函数提供给我们的”出口“,若不提供出口的话,闭包的机制导致了在函数体外无法获取函数里面的值。
外面想用哪个值,就把哪个值返回。并不是把变量返回给外面,而是把变量存储的值返回给外面
若函数中没有return或者return后面没有东西,那么默认的返回值是undefined。在函数体中return下面的代码都不会执行了(终止函数体中代码执行的作用)
4、arguments:
arguments:函数天生自带的(不管写没写形参,也不管是否传值都存在),用来接收函数传递进来的参数值的一个集合。它不是数组,是类数组(也以数字作为索引,也有length属性),有一个自己的特殊属性callee,代表的是当前函数本身
补充:跟数组很像,但不是数组,不可以用数组的方法如pop,sort等。但可以借用:
`Array.prototype.sort.call(arguments,function(a,b){
return a-b;
});`
用call把Array原型上的sort函数中的this换成arguments,再执行sort,这样arguments就可以调用数组的方法了。
5、匿名函数:
在JS中常用到的匿名函数有两种方式:
(1).自执行函数:定义函数和函数执行一起完成了 eg:;(function(num){ } )(100);(把前面定义那部分用括号包起来,前面加;作用是为了防止上面代码结束不加分号,)
(2).函数表达式:把函数定义的部分当作一个值赋值给一个变量或者元素的某一个行为 eg:oDiv.onclick = function ( ) { }