<script>var a =1;function test(){alert(a);var a = 2;alert(a);}test();alert(a);</script>

   大家猜结果等于多少?是输出1 2 1 吗?嗯嗯,当我把测试case发给她之前也是这么认为的,但测试输出后……运行结果是 undefined 2 1。当时百思不得其解,学习+测试,总结如下:

一、Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分)。切记,是function块,而for、while、if块并不是作用域的划分标准,可以看看以下几个例子:

<script>
function test2(){alert ("before for scope:"+i);    // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行)// 此时i的值是underfinedfor(var i=0;i<3;i++){alert("in for scope:"+i);  // i的值是 0、1、2, 当i为3时跳出循环}alert("after for scope:"+i);  // i的值是3,注意,此时已经在for scope以外,但i的值仍然保留为3while(true){var j = 1;break;}alert(j);    // j的值是1,注意,此时已经在while scope以外,但j的值仍然保留为1if(true){var k = 1;}alert(k);  //k的值是1,注意,此时已经在if scope以外,但k的值仍然保留为1
}test2();
//若在此时(function scope之外)再输出只存在于test2 这个function scope里的 i、j、k变量会发生神马效果呢?
alert(i); //error! 没错,是error,原因是变量i未声明(并不是未赋值,区分test2函数的第一行输出),导致脚本错误,程序到此结束!
alert("这行打印还会输出吗?"); //未执行
alert(j); //未执行
alert(k); //未执行
</script>

     二、Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。怎么理解呢?看下面一个例子:

<script>var a =1;function test(){alert(a); //a为undefined! 这个a并不是全局变量,这是因为在function scope里已经声明了(函数体倒数第4行)一个重名的局部变量,//所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前,//函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明,还没赋值,所以输出undefined。a=4       alert(a);  //a为4,没悬念了吧? 这里的a还是局部变量哦!var a;     //局部变量a在这行声明alert(a);  //a还是为4,这是因为之前已把4赋给a了}test();alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值
</script>

  三,当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope,而当全局变量遇上局部变量时,怎样使用全局变量呢?用window.globalVariableName。

<script>var a =1;function test(){   alert(window.a);  //a为1,这里的a是全局变量哦!var a=2;     //局部变量a在这行定义alert(a);  //a为2,这里的a是局部变量哦!}test();alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值
</script>

  

转载于:https://www.cnblogs.com/huxiaolin/p/4825234.html

Javascript:谈谈JS的全局变量跟局部变量相关推荐

  1. Javascript:谈谈JS的全局变量跟局部变量(转zyz511919766)

    今天公司一个实习小妹子问我两段JS代码的区别: <script type="text/javascript">var a = "Hello";fun ...

  2. js基础 全局变量和局部变量的理解

    全局变量:在整个程序中都可以使用的变量 局部变量:只能在函数中使用的变量 在js中全局变量分为显示声明和隐式声明 第一种声明方式:使用var关键字+变量名在函数外部声明就是全局变量,例如: var b ...

  3. js的全局变量、局部变量和变量提升的问题

    一开始总是傻傻分不清变量提升的问题,现在终于搞清楚了 ①  输出结果 : undefined   2 1.   var foo = 1; 2.   (function(){ 3.   console. ...

  4. 搞懂JavaScript全局变量与局部变量,看这篇文章就够了

    目录 1.什么是全局变量和局部变量 2.全局变量和局部变量的声明 2.1 全局变量的声明 2.2 局部变量的声明 3.全局变量和局部变量一些常见问题 3.1全局变量跟局部变量重名 3.2 零散变量的问 ...

  5. 认清JavaScript和JAVA全局变量和局部变量的作用域

    认清JavaScript和JAVA全局变量和局部变量的作用域 2010年2月28日 george 发表评论 阅读评论 通过淘宝面试题来认清JavaScript和JAVA全局变量和局部变量的作用域 注意 ...

  6. Javascript之全局变量和局部变量部分讲解

    以此文作为自己学习的一个总结. 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量. 一.局部变量和全局变量重名会覆盖全局变量 1 var a = 1; ...

  7. 前端:JS/22/函数(函数的概念,函数的定义格式,函数定义格式的说明,函数的调用,函数的参数),全局变量和局部变量,拷贝传值和引用传址,匿名函数,二维数组,对象,自定义对象的创建

    函数 1,函数的概念 函数,是将一段公共的代码进行封装,给它起个名字叫"函数" 函数可以一次定义,多次调用:函数可以将常用的功能代码,进行封装,如:用户名的验证,验证码函数,邮箱验 ...

  8. 10.前端JavaScript之【函数】【全局变量与局部变量】

    目录 1.函数 2.函数的全局变量与局部变量 1.函数 1.定义(1)在python定义函数需要用到关键字def在js中定义函数需要用到关键字function(2)格式:function 函数名(形参 ...

  9. JavaScript(JS)(一)

    文章目录 注 JavaScript基础知识 JavaScript作用: JavaScript写在哪里 写在script标签里 外部的js文件内,然后引入 输入输出语句 JS一些注意事项 变量 声明变量 ...

最新文章

  1. BorderDet(论文解读)
  2. jQuery插件开发
  3. [工具]Mac下非常好用的快捷终端Dterm
  4. 腾讯容器云平台GaiaStack亮相kubeCon
  5. python下载网页歌词_python3个人学习笔记-批量下载分析歌词2
  6. 推荐系统评测指标—精准率(Precision)、召回率(Recall)、F值(F-Measure)
  7. gnss rtcm rtklib Ntrip...
  8. matlab 矩阵最大值的求法
  9. Hugo Travis
  10. 集线器、交换机、路由器功能原理入门总结
  11. RealityCapture场景建模笔记
  12. Web 3D渲染引擎HOOPS Communicator动画编辑器的使用 | HOOPS教程
  13. 【MockJS】使用MockJS模拟数据 (超级详细)
  14. 我们为什么选择计算机专业?为什么学习编程?
  15. commit在c语言中的作用,【单选题】SQL语 言 中 COMMIT语句的主要作用是( ) A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务...
  16. 微商小白如何有效快速精准引流?哪里能找到精准顾客群体?
  17. “斯坦福系”的中国创业者
  18. python爬取淘宝商品图片
  19. vmware9 磁盘空间调整(shrink)
  20. 用C语言实现贪吃蛇笔记1-------.wav格式音乐的添加及播放(方法一:嵌入到可执行文件里面)

热门文章

  1. lnmp编译安装mysql_LNMP编译安装教程
  2. python字典数据的特点_Python核心数据类型之字典15
  3. 中考 计算机录取 步骤,中考录取时间及录取流程详解
  4. mysql存储过程详细教程
  5. 史上最全Java集合关系图
  6. 写python的笔记本_python笔记本:更改写入的fi
  7. Linux编译和下载嵌入式实验,嵌入式实验6交叉编译及Linux简单程序设计实验
  8. samba 开通_LINUX开启SAMBA服务
  9. python语句示例_Python学习笔记之if语句的使用示例
  10. npoi 未将对象引用设置到对象的实例_new一个对象到底占了多少内存?