闭包
1.函数定义(arguments实参,length形参长度)
function test(n,m,g,h)
{
console.log(arguments);
console.log(test.length);
}
test(1,2,3,4,5);
2.闭包(函数累加器)
function add()
{
var num = 0;
function a()
{
num ++;
console.log(num);
}
return a;
}
var myAdd = add();
myAdd();
myAdd();
myAdd();
myAdd();
4.闭包(返回的对象内部的函数用的test的执行上下文是同一个)
function test() {
var food = 'apple';
var obj = {
eatFood: function () {
if (food != '') {
console.log('I am eating ' + food);
food = '';
}else{
console.log('There is empty!')
}
},
pushFood: function (myFood) {
food = myFood;
}
}
return obj;
}
var person = test();
person.eatFood();
person.eatFood();
person.pushFood('banana');
person.eatFood();
5.立即执行函数
function test(){
var arr = [];
for (var i = 0;i < 10;i ++){
(function (j){
arr[j] = function(){
console.log(j);
}
}(i))
}
return arr;
}
var myArr = test();
for(var j = 0;j < 10;j ++){
myArr[j]();
}
6.例题
函数f加括号变成表达式,函数不存在,类型变为undefined
var x = 1;
if(function f(){}){
x+=typeof(f);
}
console.log(x);//结果为"1undefined"