5段小代码理解JS核心,闭包和作用域

代码1:

1         if (!("a" in window)) {

2             var a = 1;

3         }

4         alert(a);

显示:undefined
解释:开始a为undefined,但undefined,但 undefined当然存在于window中,So...

代码2:

1         var a = 1,

2         b = function a(x) {

3             x && a(--x);

4         };

5         alert(a);

显示:1

解释:方法a只能在a方法中调用,即a(),其它域使用b(),以a作为b方法的方法名.

代码3:

1         function a(x) {

2             return x * 2;

3         }

4         var a;

5         alert(a);

显示:

        function a(x) {
            return x * 2;
        }

解释:var a;仅是定义,并无赋值.

代码4:

1         function b(x, y, a) {

2             arguments[2] = 10;

3             alert(a);

4         }

5         b(1,2,3);

显示:10

  (PS:b(1,2,3)不论怎么修改数字,都不影响弹出a的值)

解释:输出arguments每个值都与参数有引用关系;

代码5:

1         function a() {

2             alert(this);

3         }

4         a.call(null);

显示:[Object Window]

解释:a()/a.call()/a.call(null);无区别,

 

参考资料:

Dmitry Baranovskiy's Web log

CSDN 你自以为了解了JS?

 

 

 

 

 

你可能感兴趣的:(作用域)