JavaScript作用域练习题总结

1、var的含义是什么?下面函数f1中两行代码有什么区别?

    function f1() {
        var a = 10; 
        b = 10;
    }

解析:var 是变量声明语句,=是赋值语句。第一行和第二行的区别为一个是变量声明和赋值,第二个缺省了变量申明的赋值,如果在严格模式下,为一个没有声明的变量赋值就会报错,而在非严格模式下解释器就会自动写入一个元素到window。

2、控制台输出什么内容?

    function f1() {
        var a ;
        function f2() {
            a = 5;
            b = 6;
        }
    }
    f2();
    console.log(a);
    console.log(b);

解析:抛出异常,6。根据作用域的原理。变量a 被申明但是在f1 内部,f2给a赋值的时候a能够找到于是a在f1作用域下被赋值,而在引用a的时候a在全局下没有被申明。b没有被声明过,因此在全局下被自动声明(非严格模式)。因此得出,不能说没有使用var 就是全局变量,使用了var 就是局部变量。