闭包
javascript
function f1() {
var name = "Tom";
function f2() {
alert(name);
}
return f2;
}
var f3 = f1();
f3();
闭包: 内层函数可以访问外部的变量
如f2
访问了外部的f1
定义的变量name
闭包的用途:
- 函数可以访问外部的变量
- 变量始终存在内存里
即隐藏局部变量,暴露操作函数
闭包的缺点:
- 滥用闭包,消耗内存大,容易内存泄漏
- 闭包会在父函数外部,改变父函数内部变量的值。
javascript
function fun(){
var a=1;
function fun1(){
return ++a;
}
return fun1;
}
var a=fun();
a(); //2
a();//3
a();//4
立即执行函数
立即执行函数是什么
- 声明一个匿名函数
- 马上调用这个匿名函数
立即执行函数有什么用
作用:创建一个独立的作用域,避免变量污染。
立即执行函数的写法
javascript
(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来
(function(){alert('我是匿名函数')}) () //用括号把函数包起来
!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法检查。
+function(){alert('我是匿名函数')}()
-function(){alert('我是匿名函数')}()
~function(){alert('我是匿名函数')}()
void function(){alert('我是匿名函数')}()
new function(){alert('我是匿名函数')}()