浅谈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 相关文章推荐
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js将字符串转成正则表达式的实现方法
Nov 13 Javascript
jquery.post用法示例代码
Jan 03 Javascript
jQuery判断元素是否存在的可靠方法
May 06 Javascript
javascript中setTimeout的问题解决方法
May 08 Javascript
js生成的验证码的实现与技术分析
Sep 17 Javascript
jqTransform美化表单
Oct 10 Javascript
js 毫秒转天时分秒的实例
Nov 17 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
浅析TypeScript 命名空间
Mar 19 Javascript
OpenLayer学习之自定义测量控件
Sep 28 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连接函数implode与分割explode的深入解析
2013/06/26 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
简单的自定义php模板引擎
2016/08/26 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
Javascript UrlDecode函数代码
2010/01/09 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python实现的系统实用log类实例
2015/06/30 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python中文件的读取和写入操作
2018/04/27 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
大学四年的个人自我评价
2014/01/14 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
实验心得体会
2014/09/05 职场文书
网络管理员岗位职责
2015/02/12 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB