1、函数的两中定义方法
① 函数声明
语法:
function name (arg[0],arg[1],arg[2]....){
//函数内容
}
关键点:
function关键字
函数名name!!!
特征:
函数声明提升——在执行代码之前会先读取每一个函数的声明,所以这种方法定义的函数,调用可以在定义之前。
② 函数表达式(匿名函数式)
最常见的语法:
var name = function (arg[0],arg[1],arg[2]....) {
//函数内容
}
理解:创建一个函数并把它赋值给变量name,但是注意function后面没有名称,name不是函数名
③ 二者区别
函数声明:
会把函数名与函数体进行绑定,所以对这种情况来说,若代码中重复定义了这个函数,js会尝试修复这个错误,不同浏览器的理解方式会有不同,所以尽量不要这样做。
此外就是之前提到的,会在代码执行前预先读函数声明。
函数表达式:
相当于把函数当成值来用,所以var定义的变量重名也无所谓。
2、闭包
① 闭包定义
官方定义:有权访问另一个函数作用域中的变量的函数
常见的创建方式:在一个函数内部创建另一个函数。
注意,创建的新函数可以用函数声明,也可以用匿名函数,只要创建了就是个闭包。
理解:
function A () {
var a =0; //定义A的变量
function B(){
alert (a); // B算是A的局部,所以可以调用A 的局部变量
}
}
alert(a); //错误! a算是function A 的局部变量,外部访问不到的