function a(){ var i=0; function b(){ alert(++i); } return b; } var c=a(); c(); // 1 c(); // 2 c(); // 3
function foo() { var a = 1 function fn() { a++; console.log(a) } return fn() } console.log(foo); foo(); foo();
function fn1() { var a = 1; var b = 2; function fn() { a++; console.log(a) } return fn; } var x = fn1(); x(); x(); var x = fn1(); x();
function add(x) { return function(y) { return x + y } } var add5 = add(5); var add10 = add(10); console.log(add5(2)); console.log(add10(2));
let life = (function() { return { a: function() { console.log(‘aaaaaa‘) }, b: function() { console.log(‘bbbbbb‘) }, c: function() { console.log(‘cccccc‘) } } })() life.a(); life.b();
let life = { a: function() { console.log(‘aaaaaa‘) }, b: function() { console.log(‘bbbbbb‘) }, c: function() { console.log(‘cccccc‘) } } life.a(); life.b();
【回调和闭包的区别】:
回调:
var a; function A(callback) { var a = 10 callback(); //---------【注意】:当函数B在这里调用的时候, //它并不能访问到a=10这个值, } function B() { if (a === 10) { console.log(a) } else { console.log(‘thank you‘) } } A(B);
闭包:
var a; function A() { var a = 10 function B() { //-----------这里的函数B是闭包,所以可以访问到a=10 if (a === 10) { console.log(a) } else { console.log(‘thank you‘) } } B() } A();
原文:https://www.cnblogs.com/edwardwzw/p/11754101.html