浅谈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 相关文章推荐
javascript offsetX与layerX区别
Mar 12 Javascript
根据出生日期自动取得星座的js代码
Jul 20 Javascript
关于textarea提交的内容无法换行的解决办法
Apr 09 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
Apr 12 Javascript
jQuery异步提交表单实例
May 30 jQuery
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 Javascript
详解Angular路由之路由守卫
May 10 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
探索JavaScript中私有成员的相关知识
Jun 13 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
Jul 15 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
PHP令牌 Token改进版
2008/07/18 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
含有CKEditor的表单如何提交
2014/01/09 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
上课玩手机检讨书
2014/02/08 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
平安建设工作方案
2014/06/02 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
暑期工社会实践报告
2015/07/13 职场文书
生活小常识广播稿
2015/08/19 职场文书
电力安全学习心得体会
2016/01/18 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python