JS的全局变量与局部变量及变量的提升
遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量。
这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究。
<script>
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
</script>
第一反应的输出结果应该是1 2 1,其实结果不对(正确的运行结果 undefined 2 1),真实的代码执行顺序应为
<script>
var a =1;
function test(){
var = a;
alert(a);
a = 2;
alert(a);
}
test();
alert(a);
</script>
根据预编译:
1、只有关键字函数会进行声明提前 字面量函数不会被提前的
2、所以变量会提升执行代码的最顶部,变量的值只会在原地等赋值给变量(赋值语句不会被提升)
3、如果全局变量和局部变量是一个变量名的话 在函数内部优先考虑就近原则;
简单的说就是var的提升
如var a = 1;
把var定义的变量提升到script的最上方 var = a;(此处定义在function内部所以为局部变量)
赋值语句不会被提升(哪怕=后面是一个function) a = 1;
所以就导致了a先被定义而没赋值所以输出第一个为undefined
到第二个输出的时候此时 a = 2; a已经被赋值为2了,所以输出第二个为2
第三个输出时 此时已经跳出了function ,输出的a,计算机就找到了一开始定义的全局变量 var a =1; ,所以输出第三个为1
Javascript的变量的scope是根据方法块来划分的 其中 只有function会对局部变量与全局变量产生影响
也就是说,在function中定义的变量不能跳出function的{ }
而在while、for、if中定义并使用的变量是可以跳出{ }的
<script type="text/javascript"> function test(){
var a = 1;
}
alert(a); //报错:a is not defined,因为a是没有跳出function for(var i=1;i<=3;i++){
alert(i); //依次显示 1 2 3
}
alert(i); //显示 4 很明显此时i跳出了for的{ } </script>
JS的全局变量与局部变量及变量的提升的更多相关文章
- js中全局变量和局部变量以及变量声明提升
javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102 收藏 展开 [javascript] view plain copy ...
- PHP和JS中全局变量和局部变量
一,PHP中全局变量和局部变量 php与C++中对全局变量和局部变量定义类似,全局变量:函数外定义的变量,在全局通用:局部变量:在函数内定义的变量,只在函数内有效.PHP中变量范围跨越了include ...
- Javascript:谈谈JS的全局变量跟局部变量
原文链接:http://blog.csdn.net/zyz511919766/article/details/7276089# 今天公司一个实习小妹子问我两段JS代码的区别: <script t ...
- c语言全局变量与局部变量(当变量重名时)的使用情况
在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等.不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的.这样的做法 ...
- JS关于全局变量跟局部变量的总结
一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可 ...
- JS高级. 05 词法作用域、变量名提升、作用域链、闭包
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...
- 今天才知道原来我还没弄清楚js中全局变量和局部变量的定义...
查资料看到这段还不错,来源:原文:https://blog.csdn.net/czh500/article/details/80429133 粘过来记录一下... 1.使用var声明变量,在方法内部是 ...
- JavaScript 声明全局变量与局部变量
一.JavaScript 声明全局变量的三种方式: 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即 ...
- JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...
随机推荐
- java窗体
听完老师所讲的窗体,然后自己就去尝试写代码,结果是窗体出现了,但是就是不能关闭,求解!! package Swing.src.swring; import java.awt.Color;import ...
- 完整的多文件上传实例(java版)
昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...
- 中间件详解,Django复习
day74 2018-05-21 课程安排周一: 中间件 auth模块+分析BBS项目需求(小组讨论把表结构设计出来) 1. 今日内容 中间件:http://www.cnblogs.com/liwen ...
- 关于js中的类式继承
; }; ,,]; }; ); ; }; //子类 function Bb(){ }; var F=new f(); F.prototype=Aa.prototype;//此处只能传递方法,没有办法传 ...
- vue filters中使用data中数据
vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...
- mui上拉加载会影响页面中的某些点击事件
项目是vue写的(移动端) <div class="mui-scroll"> <a :href="bannerinfo.activity_url&quo ...
- Vivado 设计套件
疑惑 有一天我在上网,逛着逛着看到一个叫https://pan.baidu.com/s/16Nu03YJLuz_aYuGQMm_8oQ的链接,那个网页的标题好像叫"Vivado 2017.4 ...
- loj #6.Guess Number
原题链接:https://loj.ac/problem/6 Guess Number 内存限制:256 MiB 时间限制:1000 ms 题目类型:交互 题目描述 这是一个交互题的模板. 系统会随机生 ...
- Unity外包 UE4外包 项目案例平台开通通知
长年承接Unity外包 UE4外包,大家好,本公司团队已将案例上传至专门的案例官网. 欢迎联系我们索取,谢谢! 有项目外包请联系QQ:372900288 索取案例.
- js打印html指定元素,解决动态获取的图片无法打印问题
用js来调用浏览器的打印接口很容易,一两行代码就能搞定,但是有些数据是通过动态生成的,例如一些动态生成的二维码,有时候调用打印接口图片会无法显示 为了解决这个问题,建议使用下面这个库 下载:https ...