JavaScript可以用关键字function来定义函数,函数的调用也不必放在函数声明之后,因为JavaScript存在提升(Hoisting)机制。
提升是JavaScript默认将当前作用域提升到前面去的行为,应用在变量的声明与函数的声明。
JavaScript函数的typeof类型为“function”,它也有属性和方法,也可以说它是一个对象。
函数声明
function funName(parameters){
//....
}
//函数表达式,也是匿名函数(没有名称)
var fun = function(a,b){ //....};
fun(3,4);
Function()构造函数
var fun = new Function("a","b","return a-b");
fun(4,3);
不过声明函数时,使用function关键字就可以了。
函数自调用
(function(a,b){
//....
})(3,4);
函数的属性和方法
- arguments: 是一个参数数组,保存参数信息。
- call():预定义的函数方法
- apply():预定义的函数方法
var myObject, myArray;
function myFunction(a, b) {
return a * b;
}
//按函数参数格式传入参数
myObject = myFunction.call(myObject, 10, 2);
//传入参数数组
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);
嵌套函数
在 JavaScript 中,所有函数都能访问它们上一层的作用域。
JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。
function add() {
var counter = 0;
function plus() {counter += 1;}
plus();
return counter;
}
闭包
闭包就是一种允许函数向关联的父级作用域寻址的访问特权。可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数。
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
特点
- 占用更多内存
- 不容易被释放
网友评论