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

http://www.cnblogs.com/wangfupeng1988/p/3994065.html

posted @ 2019-05-15 09:07  chengdu.jack.li  阅读(116)  评论(0)    收藏  举报