javascript作用域
1 function fn() { 2 var max = 10; 3 return function bar(x) { 4 if (x > max) { 5 console.log(x); 6 } 7 } 8 }; 9 10 var f1 = fn(); 11 var max = 100; 12 f1(15); 13 14 var c1 = 'A'; 15 var func1 = function () { 16 this.c1 = 'B'; 17 // var c1 = 'B'; 18 console.log('this c1', this.c1); //B 19 console.log('c1', c1); //A 20 this.fn = function () { 21 console.log('this.fn'); 22 }; 23 }; 24 var f1 = new func1(); 25 console.log('f1.c1', f1.c1); //B 26 console.log('c11', c1); //A 27 28 xo = 'alex'; 29 //如上述代码则出现三个作用域组成的作用域链,如果出现作用域链后,那么寻找变量时候就会出现顺序,对于上述实例: 30 //当执行console.log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常。 31 function Func() { 32 var xo = "seven"; 33 function inner() { 34 var xo = 'alvin'; 35 console.log(xo); 36 } 37 inner(); 38 } 39 Func();//alvin 40 //JavaScript的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。 41 xo = 'alex'; 42 43 function Func() { 44 var xo = "seven"; 45 function inner() { 46 47 console.log(xo); 48 } 49 return inner; 50 } 51 52 var ret = Func(); 53 ret(); 54 // 输出结果: seven 55 /* 56 下面代码和示例一的目的相同,也是强调在函数被调用之前作用域链已经存在: 57 58 全局作用域 -> Func函数作用域 -> inner函数作用域 59 不同的时,在执行【var ret = Func();】时,Func作用域中的xo变量的值已经由 “eric” 被重置为 “seven”,所以之后再执行【ret();】时,就只能找到“seven”。 60 */ 61 xo = 'alex'; 62 63 function Func() { 64 var xo = "eirc"; 65 function inner() { 66 67 console.log(xo); 68 } 69 xo = 'seven'; 70 return inner; 71 } 72 73 var ret = Func(); 74 ret(); 75 // 输出结果: seven 76 77 var test = function () { 78 var ret = []; 79 80 for (var i = 0; i < 5; i++) { 81 ret[i] = function () { 82 return i; 83 } 84 } 85 86 return ret; 87 }; 88 89 var test0 = test()[0](); 90 console.log(test0); // 输出:5 91 92 var test1 = test()[1](); 93 console.log(test1); //输出:5 94 95 for (var i = 0; i < 5; i++) { 96 97 (function (j) { 98 99 setTimeout(function () { 100 console.log(j); 101 }, 1000); 102 })(i); 103 } 104 105 106 // 输出:0,1,2,3,4
共同学习,共同进步!

浙公网安备 33010602011771号