Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2780948
  • 博文数量: 77
  • 博客积分: 10204
  • 博客等级: 上将
  • 技术积分: 5035
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-05 22:13
文章分类
文章存档

2013年(1)

2010年(1)

2009年(17)

2008年(58)

我的朋友

分类:

2008-03-19 00:59:00

<script>
    /**
     * @describe 小心javascript当中的变量作用域
     * @date 2008-03-18 20:37
     * @author BianYuan
    */

    
    /** 定义全局变量 */
    var userName = "边缘";
    var userEmail = "liuxingyuyuni@gmail.com";
    document.write("全局变量userName的值为 : " + userName + "
"
);
    document.write("全局变量userEmail的值为 : " + userEmail + "
");
    /*
     * @todo 获得用户名称
     * @describe 如果在方法中未使用var关键字声明变量
     * 那么在方法中非常容易在无意间修改了全局变量的值
    */

    function getUserName() {
        /** 这里的userName与全局变量重名,
         js认为这是全局变量,而此时你很有可能当他是局部的
         这里修改了全局变量userName的值,我理解这可能正是因为JS的简单性造成的
         在其他语言如(PHP)当中,如果在方法中想使用全局变量的名称首先是需要global
         在写JS的时候要特别注意.否则就会在方法中意外修改了全局变量的值(其实有时候这不是你想要的)
         */

        userName = "张三"; //实际上我以为这是局部的,我想有些新手也同样这样认为[在方法内变量与全局变量同名时!]

        
        /**
         * 千万注意下边friend变量,因为没有使用var关键字声明,故此时定义的是全局变量.后边会看到结果
        */

        friend = "某某某";//定义局部变量,此时全局中并未有friend变量

        
        document.write("全局变量userName在方法内被意外修改成: " + userName + "
");
    }
    /*
     * @todo 如何更加安全的利用JS的变量作用域呢?
     * 使用var声明变量是一个好习惯,由其是在方法当中
    */

    function getUserEmail() {
        /**
         这里使用了var关键字声明了userName为局部变量,
         就算此时外部有同名的变量名也不会被重写,
         不会对全局变量产生任何影响
        */

        var userEmail = "nobody@gmail.com";
        document.write("这里输出的是获真价实的局变变量值,就算变量名与方法外部全局变量名重名也不会影响全局变量"
         +userEmail + "

");
    }
    //调用方法

    getUserName();
    getUserEmail();
    
    document.write("再次输出全局变量userName的值为 : " + userName + " ! 注: 已经被某个方法给强行修改了
");

    document.write("全局变量userEmail的值为 : " + userEmail + " !注: 未被修改
");
    /** 在getUserName() 方法中我们曾经定义了一个变量 friend ,表面看来是在方法体中定义的,应该为局部变量
     这里是不应该输出的,可是......
    */

    document.write("曾经在getUserName方法中定义的变量:friend: " + friend
     + "
!注:竟然输出了, 记加上var!现在动手在上边的friend变量前边加上var试试");
    document.write("

总结: 在方法体中是不是局部变量就看: 在变量是前方是否使用了var关键字

");
    document.write("

总算搞明白了JS的变量变用域......

"
);
</script>

阅读(2536) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

liuxingyuyuni2008-05-12 11:52:18

很乱....

chinaunix网友2008-05-12 08:47:00

region