javaScript中的匿名函数和闭包(第1篇)
直接po图和代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javaScript中的匿名函数和闭包(第1篇)</title>
<script type="text/javascript">
//普通函数
function hello(){
return '令狐冲';
}
console.log(hello());
//匿名函数(没有名字的函数被称为匿名函数),如下会报错
//单独的匿名函数,是无法运行的,就算能运行,也无法调用,因为没有名字
/*
function (){
console.log('我是一个匿名函数');
}
*/
//将匿名函数赋值给一个变量
var fun1 = function (){
return '红红火火恍恍惚惚,我是一个匿名函数';
}; //var fun1 = 等于号右边的是一个完整的语句,既然是一个语句,最好在语句后面加一个;分号
console.log(fun1);
//调用匿名函数
console.log(fun1());
/*
通过表达式自我执行
*/
//通过自我执行来执行匿名函数
/*
语法:
(匿名函数)(); //第一个圆括号中放匿名函数,第二个圆括号是执行的意思
*/
(function() {
console.log('江西省赣州市于都县');
})(); //封装成表达式,第二个圆括号表示执行函数,并且传参
//还有如下这种写法也是可以的
/*
语法:
(匿名函数());
*/
(function() {
console.log('赣州市于都县');
}());
//把匿名函数自我执行的返回值赋给变量
var v1 = (function() {
return '好好工作,努力赚钱';
})();
console.log(v1);
//将匿名函数的自我执行的返回值打印出来
console.log((function (){return '一万年太久只争朝夕';})());
//自我执行匿名函数的传参
(function(age) {
console.log('我今年' + age + '岁了');
})(12);
//
function show(){
return function (){ //闭包(函数里的匿名函数,产生闭包)
return '天若有情天亦老,人间正道是沧桑';
};
}
console.log(show);
// alert(show);
console.log(show());
// alert(show());
console.log(show()());
var f1 = show();
console.log(f1);
// alert(f1);
console.log(f1());
//匿名函数里面再放一个匿名函数也是可以的,以后再说
function f2(){
//局部变量,私有变量
var age = 12;
}
//访问不到局部变量
// console.log(age); //报错age is not defined
//通过闭包返回局部变量
function f3(){
var money = 16500.85;
return function (){
return money;
};
}
console.log(f3()());
var f4 = f3();
console.log(f4());
/*
使用 闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,
可以避免使用全局变量。(全局变量污染导致应用程序不可预测性,每个模块都可调用必将引来灾难)
所以推荐使用私有的,封装的局部变量
*/
//使用全局变量进行累加
var myAge = 6;
function f5(){
myAge++;
}
console.log(myAge);
f5();
console.log(myAge);
f5();
console.log(myAge);
f5();
console.log(myAge);
//使用局部变量进行累加
function f6(){
var youAge = 13;
youAge++;
return youAge;
}
console.log(f6()); //结果为14
console.log(f6()); //结果为14
console.log(f6()); //结果为14
console.log(f6()); //结果为14
//使用匿名函数实现局部变量驻留内存中从而累加
function f7(){
var salary = 17500.66; //局部变量
return function (){
salary++;
return salary;
}
}
var f8 = f7();
console.log(f8());
console.log(f8());
console.log(f8());
//直接访问f7()函数内部的salary这个局部变量是访问不到的
// console.log(salary); //报错salary is not defined
console.log(f8);
/*
由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,
所以可能会占用更多的内存。过度使用闭包会导致性能下降,
建议在非常有必要的时候才使用闭包
*/
//
f8 = null; //解除引用,等待垃圾回收
console.log(f8);
// console.log(f8()); //报错f8 is not a function
</script>
</head>
<body>
<h1>javaScript中的匿名函数和闭包(第1篇)</h1>
</body>
</html>