1.返回值
var fn = function() {
var name = function() {
var name = 'lzx';
return function() {
return name;
}
}
}
2.函数赋值, 将内部函数赋值给外部变量
var fn2;
var fn = function() {
var name = 'lzx';
fn2 = function(){
return name;
}
}
fn();
console.log(fn2());
3.函数参数(高阶函数)
function fn2(fn){
console.log(fn());
}
function fn() {
var name = 'lzxx';
fn2(function() {
return name;
});
}
fn();
4.IIFE
function fn3(fn){
console.log(fn());
}
(function(){
var name = 'lll';
var a = function() {
return name;
};
fn3(a)
})()
5.循环赋值
function fn5() {
var arr = [];
for(var i=0; i<10; i++) {
arr[i] = (function(n){
return function(){
return n;
}
})(i)
}
return arr;
}
6.getter和setter
var setVal, getVal;
(function(){
var num = 0;
getVal = function(){
return num;
};
setVal = function(n) {
num = n;
}
})()
7.迭代器
var add = (function() {
var num = 0;
return function(){
return ++num;
}
})()
console.log(add());
console.log(add());
8.区分是否首次的场景
var isFirstLoad = (function(){
var list = [];
return function(id){
if(list.indexOf(id) > -1){
return false;
} else {
list.push(id);
return true
}
}
})()
9.缓存
var mult = function(){
var _arguments = arguments;
var cash = {};
var calc = function() {
var sum = 0;
for(var i=0; i<_arguments.length; i++){
sum += _arguments[i];
}
return sum;
}
return function() {
var args = Array.prototype.join.apply(_arguments);
if(args in cash){
return cash[args];
}
return cash[args] = calc(_arguments);
}
};
10.img对象图片上报;低版本ie浏览器会丢失上传的数据,原因是代码执行了完了,变量也随之删除,使用闭包将变量保存在内存中
var report = function(url) {
var imgs = [];
return function(url) {
var img = new Image();
imgs.push(img);
img.src = url;
}
}();