javascript匿名函数与闭包
javascript匿名函数与闭包
匿名函数
1.就是没有名字的函数
(function(x, y){ alert(x + y); })(2, 3);
创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。
闭包
1.使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
2.闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。
JavaScript自由变量
1.在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图:
2.要到创建这个函数的那个作用域中取值,(是“创建”,而不是“调用”),如:
var x=10; function fn(){ console.log(x); } function show(f){ var x=20; (function(){ f(); })(); } show(fn); //创建fn时,是在x=10的下一级作用域链中进行创建的
高阶函数
1.返回另一个函数的函数称为高阶函数
2.内部函数在没有任何局部声明之前(既不是被传入,也不是局部声明)使用的变量就是被捕获的变量。
3.变量的捕获发生在创建闭包的时候
function makeAdder(captured) { return function(free) { var ret = free + captured; console.log(ret); } } var add10 = makeAdder(10); add10(2); // 输出:12
1.外部函数中的变量captured被执行加法的返回函数捕获,内部函数从未声明过captured变量,却可以引用它。
2.要到创建这个函数的那个作用域中取值,(是“创建”,而不是“调用”)
var a = 10; function fn() { var b = 20; function bar() { console.log(a + b); } return bar; } var x = fn(); b = 200; x(); //30
创建时a=10,b=20
参考原文:http://www.cnblogs.com/wangfupeng1988/p/3992795.html