闭包练习题
1、
var a = 10 function foo(){ console.log(a) } function sum() { var a = 20 foo() } sum() /* 输出 10 /
函数 foo() 是在全局下创建的,所以 a 的上级作用域就是 window,输出就是 10
2、
var n = 10 function fn(){ var n =20 function f() { n++; console.log(n) } f() return f } var x = fn() x() x() console.log(n) /* 输出 * 21 22 23 10 /
思路:fn 的返回值是什么变量 x 就是什么,这里 fn 的返回值是函数名 f 也就是 f 的堆内存地址,x() 也就是执行的是函数 f(),而不是 fn(),输出的结果显而易见
3、
// 全局变量 var x = 1; // 对象 var obj = { x: 2, }; // obj.fn = (function (x) { this.x *= x++; //x++ 先返回原值 参加运算 后自++ return function (y) { x += y; this.x *= ++x; //++x 变量先自加1参加运算 后 返回值 console.log(x); }; })(obj.x); // var fn = obj.fn;//自执行函数 返回的函数 obj.fn(2); //6 //调用 返回的函数 obj调用 this指向obj fn(1); //8 //调用返回的函数 全局变量fn调用 this指向window console.log(obj.x, x);//12 16

浙公网安备 33010602011771号