Function对象
1.什么是Function对象:
内存中保存一段可重用的代码段的对象,再起一个名字。
2.为什么要使用:
重用!
3.什么时候使用
如果一段代码段需要反复使用,就应该保存在一个函数中,反复调用函数。
4.创建的3种方式
(1)声明方式:
function 函数名(形参列表){
函数体;
return 返回值;
}
问题: 声明提前: 在程序开始执行前,会自动将所有var声明的变量和function声明的函数,都提前到当前作用域的顶部,集中创建。赋值留在原地
(2)用赋值的方式:
var函数名=function (形参列表){
函数体;
return 返回值;
}
优点: 仅函数名提前,函数体留在原地。
揭示了函数的重要秘密:
(1)函数名本质就是一个普通的变量
(2)而函数定义其实是一个对象(独立的存储空间)
(3) 用new创建:
var fun=new Function("形参","形参",...,"...")
调用: var 返回值=函数名(实参值列表)
调用函数,等效于执行函数中的代码段
调用几次,就重复执行几次
如果不调用,是不会执行函数的内容的
5.重载:overload
(1)什么是重载
相同函数名不同形参列表的多个函数,在调用时,可根据传入实参的不同,自动选择匹配的函数调用。
(2)为什么要使用重载
调用不方便!
(3)何时使用
同一件事,根据传入实参的不同,自动选择不同的执行过程执行时。
(4)如何:
-
问题
- js语言不支持多个同名函数同时存在,所以默认和不支持重载。 解决
- 借助: arguments
什么是arguments:
每个函数中自动包含的可直接使用的接收所有传入函数实参值列表的类数组对象
类数组对象是: 长得像 数组的 对象
vs 数组:
相同: 1. 下标, 2. length, 3. for遍历
不同: 根本不同 类型不同 导致arguments不能使用数组家的任何函数。
6.匿名函数:
(1)什么是:
创建函数时,不指定函数名
(2)为什么— 2大作用:
- 节约内存
- 避免全局污染
(3)何时: 2种:
- 只要一个函数只使用一次
- 划分临时作用域的时候,避免全局污染
(4)如何: 2种:
- 回调函数: 虽然我们自己定义的,但是不是我们自己调用执行的函数。
比如:
arr.sort(function(a,b){return a-b})
str.replace(/\b[a-z]/g, function(kw){ return ... })
都是为了节约内存!
- 匿名函数自调: 创建函数后,立刻调用函数
(function(){
var t=new Date();
document.write("<h1>页面加载完成,at: "+t.toLocaleString()+"</h1>")
})();
创建函数后,自己调用自己
优点: 不但自己调用后释放,且函数内的局部变量调用后,也会自动释放。
总结:
1. 今后所有js代码都要写在匿名函数自调中
2. 今后禁止使用全局变量:(1) 浪费内存; (2) 全局污染