IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    javascript变量作用域的几个例子

    潘魏增发表于 2009-02-03 00:20:00
    love 0

    1. javascript无块级作用域,变量在函数内部可见。和php类似。

    function func_scope(){
        var x=1;
        if (true) {
            var x=2;
            if (true) {
                var x=3;
                alert(x);
            }
            alert(x);
        }
        alert(x);
    }
    func_scope();

    输出: 3 3 3

    2. 对象初始化可以对自身的属性执行修改,可以修改全局变量的值。

    function foo(){
        foo.abc = function(){alert('def')};
        this.abc = function(){alert('xyz')};
        abc = function(){alert('@@@@@')};
        var abc = function(){alert('$$$$$$')};
    }
    foo.prototype.abc = function(){alert('456');}
    foo.abc = function(){alert('123');}
    var f = new foo();
    f.abc();
    foo.abc();
    abc();

    输出: xyz def 错误: abc is not defined (相应解释在第3个例子中)

    3. 函数内,只要变量名前面出现var则该变量为局部变量。

    var myVar =  "GLOBAL";
    function foo() {
        // myVar已经在下面声明,但是在此之前却没有定义
        alert("myVar evaluates to '"+myVar+"'");
        // 这个myVar其实是局部变量
        myVar = "NEW_GLOBAL_VALUE";
        alert("myVar evaluates to '"+myVar+"'");
        // window.myVar指向全局的myVar
        alert("myVar evaluates to '"+window.myVar+"'");
        // 声明一个局部变量myVar,去掉这个则输出结果就完全不同
        var myVar = "LOCAL";
        alert("myVar evaluates to '"+myVar+"'");
    }
    foo();
    alert("myVar evaluates to '"+myVar+"'");

    输出: myVar evaluates to 'undefined' myVar evaluates to 'NEW_GLOBAL_VALUE' myVar evaluates to 'GLOBAL' myVar evaluates to 'LOCAL' myVar evaluates to 'GLOBAL'

    对应第2个例子,foo中的abc(abc = function(){alert('@@@@@')};)为局部变量,全局变量中没有定义过abc所以会报undefined的错误。

    结论:

    1. 变量函数内可见;
    2. 只要在函数内部声明变量使用了var,则该变量在整个函数内部都是局部变量;
    3. 声明所有的变量都应该加上var,防止产生歧义;
    4. 尽量避免引入全局变量。

    参考文档: http://www.itmill.com/articles/Javascript_global_and_local_variable_scope.htm http://birdshome.cnblogs.com/archive/2005/01/26/97885.html http://www.planabc.net/2007/09/20/javascript_examination_questions/



沪ICP备19023445号-2号
友情链接