JS全局变量和局部变量

JS全局变量和局部变量全局变量和局部变量在看了一个博主写的关于js全局变量的的介绍后,自己也跟着做了一下,并且记录在这里。原博客地址:谈谈JS的全局变量跟局部变量。博主说的比较详细,也比我的表达好,如果不是没耐心,建议去看看原博主的文章先上一段代码:<scripttype=”text/javascript”>vara=1;functiontest(){ alert(a); a=4; aler

大家好,又见面了,我是你们的朋友全栈君。

全局变量和局部变量

在看了一个博主写的关于js全局变量的的介绍后,自己也跟着做了一下,并且记录在这里。
原博客地址:谈谈JS的全局变量跟局部变量。
博主说的比较详细,也比我的表达好。不过我的内容多了点东西,关于定义变量时不加var的影响,在文章的最后面。

先上一段代码:
<script type="text/javascript">        
        var a =1;
        function test(){
	        alert(a); 
	        a=4;
	        alert(a); 
	        var a;    
	        alert(a); 
    	}
    	test();
    	alert(a);
</script>

在网页里输出结果为:undefined > 4 > 4 > 1

原因是:
全局变量a在外部被定义,可以在全局被使用,所以最后alert(a)显示的是1。而在方法内重新var a;相当于重新定义了一个局部变量a,会在这个方法内把全局变量的作用域掩盖,而js在执行之前的扫描检测机制会使得function内部的全局变量作用能力提前失效。这段代码就相当于:

<script type="text/javascript">        
        var a =1;
        function test(){
         	var a;     //相当于声明被提前了
	        alert(a); 
	        a=4;
	        alert(a); 
	        alert(a); 
    	}
    	test();
    	alert(a);
</script>
再看:
<script type="text/javascript">        
        var a =1;
        function test(){
	        var a = 2;
	        alert(window.a);
	        alert(a);
    	}
    	test();
    	alert(a);
</script>

输出结果为:1 > 2 > 1
和java的继承有点相似,function相当于子类,会遮盖父类信息,但是如果使用super.属性依旧会看得到父类信息,这里window就像是父类。

不一样的是: java在for,if,while内定义的变量不会在他们的范围外保留,但是:

<script type="text/javascript">        
        for(var i=0;i<2;i++){
            alert(i);
        }
        alert(i)
</script>

输出结果是:0 > 1 > 2
在for循环外部,i也被保留改动了,而i是在for循环内被定义的。while和if同样如此。

还有,在定义变量时不加var

定义变量不加var,相当于在定义全局变量

<script type="text/javascript">        
        i = 2;
        function test(){
            n = 2;
            i = 3;
            alert(n);
            alert(i);
        }
        test()
        alert(n)
        alert(i)
</script>

输出结果为:2 > 3 > 2 > 3
n在function内部被定义成全局变量,所以在外部也能被访问到
但是如果在定义n时前面加上var

<script type="text/javascript">        
        i = 2;
        function test(){
            var n = 2; //加上了var
            i = 3;
            alert(n);
            alert(i);
        }
        test()
        alert(n)
        alert(i)
</script>

结果为:2 > 3
没了!最后的alert(i)被强制中断了。在控制台可以看到出现了错误:
在这里插入图片描述
说n没有被定义,因为在内部加上了var,就相当于在当前域定义变量,而当前域是function

那么你再猜一猜下面的结果是什么?:
<script type="text/javascript">        
            i = 2;
            function test(){
                alert(i);
                i = 3;
                alert(i);
            }
            test()
           	alert(i)
</script>

输出结果为:2 > 3 > 3
因为在内部并没有重新定义i,而唯一改变的i = 3;是在检测到i在外部定义后作出的改变,所以i不会被覆盖作用域,test()里第一个alert能够看到外部i的值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140963.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Apache配置虚拟主机_apache中配置虚拟主机的作用

    Apache配置虚拟主机_apache中配置虚拟主机的作用修改Apache的虚拟主机配置文件httpd-vhosts.conf,在文件的最后加上如下的代码:NameVirtualHost *:80    ServerNamea.com    DocumentRoot “E:\xampp\htdocs\a”    ServerName b.com    DocumentRoot “E:\xampp\

    2022年9月18日
  • java简单入门教程_史上最快速最简单的java入门教程

    java简单入门教程_史上最快速最简单的java入门教程原标题:史上最快速最简单的java入门教程§java是什么?Java是一门开发软件的程序语言,用于编写比如:办公自动化软件、超市的销售系统、银行交易系统等程序软件.§准备写Java程序。准备工作分为三步:第一步:下载安装JDK开发环境(建议官网下载),基本都是下一步。第二步:配置JDK环境变量,主要配置bin和classpath(主要为了在控制台能方便执行程序。如果不怕麻烦,此步可以省略)。具体…

    2022年7月8日
  • 关闭默认共享-关于Windows的默认共享介绍

    一:关于Windows的默认共享介绍网上其实到处都有谈论到,现我也只是整理一下:在在Windows 系统中,在“我的电脑”上右击“管理”,依次选择“系统工具→共享文件夹→共享”,就会看到一些带有美元“$”标记的符号就是Windows系统默认共享,也就是Windows在安装完毕后自动共享的功能。当然在cmd命令下输入netshare同样可以查看得到。IPC$、ADMIN$、C…

    2022年4月1日
  • IT界名人_it行业精英人物

    IT界名人_it行业精英人物互联网  张朝阳搜狐公司CEO  丁磊网易创始人/首席架构设计师  茅道临新浪CEO  陈天桥盛大CEO  马化腾腾讯CEO  王峻涛珠峰伟业(6688)总裁  鲍岳桥联众电脑总裁  宫玉国IT168网站CEO  黄明生263网络集团总裁兼COO  邵亦波易趣网CEO  王树彤原卓越网CEO  李彦宏百度

    2022年8月30日
  • navicate15 激活码(注册激活)

    (navicate15 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月26日
  • charles(2)MAC Charles关闭后无法上网「建议收藏」

    charles(2)MAC Charles关闭后无法上网「建议收藏」前言charles关闭后,发现网页突然打开了,那大概率是设置了代理,但明明已经关闭了charles,这是由于mac网络偏好设置中,使用的是手动代理,将其改为自动即可解决方法1打开网络偏好设置,

    2022年7月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号