Skip to content

闭包

javascript
function f1() {
 var name = "Tom";
 function f2() {
  alert(name);
 }
 return f2;
}
var f3 = f1();
f3();

闭包: 内层函数可以访问外部的变量

f2访问了外部的f1定义的变量name

闭包的用途:

  1. 函数可以访问外部的变量
  2. 变量始终存在内存里

隐藏局部变量,暴露操作函数

闭包的缺点:

  1. 滥用闭包,消耗内存大,容易内存泄漏
  2. 闭包会在父函数外部,改变父函数内部变量的值。
javascript
function fun(){
 var a=1;
 function fun1(){
 return ++a;
 }
 return fun1;
}
var a=fun();
a(); //2
a();//3
a();//4

立即执行函数

立即执行函数是什么

  1. 声明一个匿名函数
  2. 马上调用这个匿名函数

立即执行函数有什么用

作用:创建一个独立的作用域,避免变量污染。

立即执行函数的写法

javascript
(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来
(function(){alert('我是匿名函数')}) () //用括号把函数包起来
!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法检查。
+function(){alert('我是匿名函数')}()
-function(){alert('我是匿名函数')}()
~function(){alert('我是匿名函数')}()
void function(){alert('我是匿名函数')}()
new function(){alert('我是匿名函数')}()