浅谈JavaScript的全局变量与局部变量


Posted in Javascript onJune 10, 2016

一、JavaScript scope 的划分标准是function函数块,不是以 if、while、for来划分的

<script>
function f1(){
   alert("before for scope:"+i);    
 //i未赋值(并不是没有声明!使用未声明变量或函数会导致致命错误从而中断脚本执行)
 //此时i值为undefined
   for(var i=0; i<3;i++){
       alert("in for scope:"+i);}
 //i的值是0,1,2  
   alert(“after for scope:”+1);
  //i的值是3,此时已经在for scope之外,但i的值仍然保留为3
    while(true){
       var j=1;
       break;}
    alert(j);
  //j的值是1,此时已经在while scope之外,但j的值仍然保留为1
    if(true){
      var k=1;
    }
    alert(k);
  //k的值为1,此时已经在if scope之外,但k的值仍保留为1
}
f1();
//此时在函数块外调用函数,再次输出存在于f1这个function scope里的i j k变量
alert(i);
//error!!!原因是这里的i未声明(不是未赋值,区别f1的第一行输出),脚本错误,程序结束!
alert(j);    
//未执行
alert(k);
//未执行
</script>

二、JavaScript在执行之前会对整个脚本文件进行预编译(对脚本文件的声明部分做分析,包括局部变量部分),从而确定实变量的作用域。举个例子在下边:

<script>
   var x=1;
   function f2(){
    alert(x);
   //x的值为undefined!这个x并不是全局变量,因为在function scope已经又声明了一个重名的局部变量,所以全局变量的参数a被覆盖了。
    说明了JavaScript在执行前会进行预编译,函数体内的x就被指向局部变量,而不是全局变量。此时x只有声明,没有赋值,所以为undefined
    x=3;
    alert(x);
   //x值为3.但还是局部变量
    var x;
   //局部变量x在这里声明
    alert(x);
   //值为3
   }
   f2();
   alert(x);
   //x值为1,并不是在function scope内,x的值为全局变量的值。
</script>

三、当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope,而当全局变量遇上局部变量时,

怎样使用全局变量呢?用window.globalVariableName。

<script>
   var a=1;
    function f3(){
       alert(window.a);
  //a位1,这里的a是全局变量
       var a=2;
        alert(a);
      }
    f3();
    alert(a);
</script>

以上这篇浅谈JavaScript的全局变量与局部变量就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
编写兼容IE和FireFox的脚本
May 18 Javascript
JavaScript Function函数类型介绍
Apr 08 Javascript
Javascript实现的Map集合工具类完整实例
Jul 31 Javascript
JS使用onerror捕获异常示例
Aug 03 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 Javascript
javaScript知识点总结(必看篇)
Jun 10 #Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 #Javascript
用JavaScript获取页面文档内容的实现代码
Jun 10 #Javascript
老生常谈JavaScript数组的用法
Jun 10 #Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 #Javascript
jQuery学习心得总结(必看篇)
Jun 10 #Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 #Javascript
You might like
消息持续发送的完整例子
2006/10/09 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
python将字符串转换成数组的方法
2015/04/29 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python List cmp()知识点总结
2019/02/18 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python常用排序算法的实现代码
2019/11/08 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
基于python实现删除指定文件类型
2020/07/21 Python
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
.net笔试题
2014/03/03 面试题
实习自荐信
2013/10/13 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
火灾现场处置方案
2014/05/28 职场文书
先进典型发言材料
2014/12/30 职场文书
民事诉讼代理词
2015/05/25 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers