浅谈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性能陷阱小结(附实例说明)
Dec 28 Javascript
JavaScript入门之事件、cookie、定时等
Oct 21 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
webstorm添加*.vue文件支持
May 08 Javascript
jQuery UI实现动画效果代码分享
Aug 19 jQuery
Vue通过ref父子组件拿值方法
Sep 12 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
curl实现站外采集的方法和技巧
2014/01/31 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js的回调函数详解
2015/01/05 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
python对字典进行排序实例
2014/09/25 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python 加密与解密小结
2018/12/06 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
python脚本定时发送邮件
2020/12/22 Python
社区党员先进事迹
2014/01/22 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
物业保安员岗位职责
2014/03/14 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
承租经营合作者协议书
2014/10/01 职场文书
学校节水倡议书
2015/04/29 职场文书
入党培养人考察意见
2015/06/08 职场文书
导游词之千岛湖
2019/09/23 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏
python获取带有返回值的多线程
2022/05/02 Python