function a() { function b() { function c() { } c() } b() } a() a defined a.[[scope]] --> 0:GO a doing a.[[scope]] --> 0:aAO 1:GO b defined b.[[scope]] --> 0:aAO 1:GO b doing b.[[scope]] --> 0:bAO --> 1:aAO --> 2:GO c defined c.[[scope]] --> 0:bAO --> 1:aAO --> 2:GO c doing c.[[scope]] --> 0:cAO --> 1:bAO --> 2:aAO --> 3:GO /** * 闭包 * @returns {b} */ function a() { function b() { var bbb = 234; console.log(aaa) } var aaa = 123; return b } var demo = a() demo() //123 function a() { var num = 100; function b() { num++ console.log(num) } return b } var demo = a() demo() //101 demo() //102 function test() { var num = 100; function a() { num++; console.log(num) } function b() { num--; console.log(num) } return [a,b] } var temp = test() temp[0](); //101 temp[1](); //100 function enter() { var food = ""; var obj={ eat:function () { console.log(food) food="" }, push:function (myfood) { food=myfood } } return obj } var test = enter() test.push("banana") test.eat();//banana /** * 立即执行函数 * 可以有返回值 * 只有表达式才能被立即执行 */ var num = (function () { return 10 }()) console.log(num) //10 var num = function () { console.log("a") }() //a /** * 闭包与立即执行函数 */ function test() { var arr=[]; for(var i=0;i<10;i++){ arr[i] = function () { console.log(i) } } return arr } var myarr = test() for(var j = 0;j<myarr.length;j++){ myarr[j]() // 10个10 // } //如何输出0-9 把var 改成let function test() { var arr=[]; for(let i=0;i<10;i++){ arr[i] = function () { console.log(i) } } return arr } var myarr = test() for(var j = 0;j<myarr.length;j++){ myarr[j]() // 0-9 } //立即执行函数 function test() { var arr=[]; for(let i=0;i<10;i++){ (function (j) { arr[j] = function () { console.log(i) } }(i)) } return arr } var myarr = test() for(var j = 0;j<myarr.length;j++){ myarr[j]() // 0-9 } 输出0-4 for(var i=0;i<5;i++){ (function (i) { setTimeout(function () { console.log(i) },0) }(i)) }
立即执行函数与闭包
最新推荐文章于 2024-04-02 17:08:41 发布