Javascript:谈谈JS的全局变量跟局部变量
<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的全局变量跟局部变量相关推荐
- Javascript:谈谈JS的全局变量跟局部变量(转zyz511919766)
今天公司一个实习小妹子问我两段JS代码的区别: <script type="text/javascript">var a = "Hello";fun ...
- js基础 全局变量和局部变量的理解
全局变量:在整个程序中都可以使用的变量 局部变量:只能在函数中使用的变量 在js中全局变量分为显示声明和隐式声明 第一种声明方式:使用var关键字+变量名在函数外部声明就是全局变量,例如: var b ...
- js的全局变量、局部变量和变量提升的问题
一开始总是傻傻分不清变量提升的问题,现在终于搞清楚了 ① 输出结果 : undefined 2 1. var foo = 1; 2. (function(){ 3. console. ...
- 搞懂JavaScript全局变量与局部变量,看这篇文章就够了
目录 1.什么是全局变量和局部变量 2.全局变量和局部变量的声明 2.1 全局变量的声明 2.2 局部变量的声明 3.全局变量和局部变量一些常见问题 3.1全局变量跟局部变量重名 3.2 零散变量的问 ...
- 认清JavaScript和JAVA全局变量和局部变量的作用域
认清JavaScript和JAVA全局变量和局部变量的作用域 2010年2月28日 george 发表评论 阅读评论 通过淘宝面试题来认清JavaScript和JAVA全局变量和局部变量的作用域 注意 ...
- Javascript之全局变量和局部变量部分讲解
以此文作为自己学习的一个总结. 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量. 一.局部变量和全局变量重名会覆盖全局变量 1 var a = 1; ...
- 前端:JS/22/函数(函数的概念,函数的定义格式,函数定义格式的说明,函数的调用,函数的参数),全局变量和局部变量,拷贝传值和引用传址,匿名函数,二维数组,对象,自定义对象的创建
函数 1,函数的概念 函数,是将一段公共的代码进行封装,给它起个名字叫"函数" 函数可以一次定义,多次调用:函数可以将常用的功能代码,进行封装,如:用户名的验证,验证码函数,邮箱验 ...
- 10.前端JavaScript之【函数】【全局变量与局部变量】
目录 1.函数 2.函数的全局变量与局部变量 1.函数 1.定义(1)在python定义函数需要用到关键字def在js中定义函数需要用到关键字function(2)格式:function 函数名(形参 ...
- JavaScript(JS)(一)
文章目录 注 JavaScript基础知识 JavaScript作用: JavaScript写在哪里 写在script标签里 外部的js文件内,然后引入 输入输出语句 JS一些注意事项 变量 声明变量 ...
最新文章
- BorderDet(论文解读)
- jQuery插件开发
- [工具]Mac下非常好用的快捷终端Dterm
- 腾讯容器云平台GaiaStack亮相kubeCon
- python下载网页歌词_python3个人学习笔记-批量下载分析歌词2
- 推荐系统评测指标—精准率(Precision)、召回率(Recall)、F值(F-Measure)
- gnss rtcm rtklib Ntrip...
- matlab 矩阵最大值的求法
- Hugo Travis
- 集线器、交换机、路由器功能原理入门总结
- RealityCapture场景建模笔记
- Web 3D渲染引擎HOOPS Communicator动画编辑器的使用 | HOOPS教程
- 【MockJS】使用MockJS模拟数据 (超级详细)
- 我们为什么选择计算机专业?为什么学习编程?
- commit在c语言中的作用,【单选题】SQL语 言 中 COMMIT语句的主要作用是( )
A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务...
- 微商小白如何有效快速精准引流?哪里能找到精准顾客群体?
- “斯坦福系”的中国创业者
- python爬取淘宝商品图片
- vmware9 磁盘空间调整(shrink)
- 用C语言实现贪吃蛇笔记1-------.wav格式音乐的添加及播放(方法一:嵌入到可执行文件里面)
热门文章
- lnmp编译安装mysql_LNMP编译安装教程
- python字典数据的特点_Python核心数据类型之字典15
- 中考 计算机录取 步骤,中考录取时间及录取流程详解
- mysql存储过程详细教程
- 史上最全Java集合关系图
- 写python的笔记本_python笔记本:更改写入的fi
- Linux编译和下载嵌入式实验,嵌入式实验6交叉编译及Linux简单程序设计实验
- samba 开通_LINUX开启SAMBA服务
- python语句示例_Python学习笔记之if语句的使用示例
- npoi 未将对象引用设置到对象的实例_new一个对象到底占了多少内存?