javascript全局变量和局部变量详解
一、使用var声明的是局部变量,但是在全局作用域中使用var则与不用var一样,声明的是全局变量。
a = 1; // 全局变量
var a = 1; // 全局变量
全局变量相当于window对象的属性,可以window.属性名的方式访问及修改。
二、在局部作用域中,使用var声明局部变量,不使用var则声明全局变量。
function fun() {var a = 1;}
fun();
console.log(a); // undefined
三、对比
例1:
var a = 1; // 全局变量function fun (){var a = 2; // 局部变量,虽与全局变量同名,但这是在函数体内部声明的全新变量,与全局中的a无关console.log(a); // 值为2}fun();console.log(a); // 值为1,尽管函数内部的局部变量a为2,但其与全局变量的a不是同一个,且在函数执行完后就被销毁了,所以这里输出的a是全局变量
例2:
var a = 1; // 全局变量function fun (){a = 2; // 没有用var,所以这里直接引用了全局变量a并修改了它的值,没有声明新的局部变量console.log(a); // 值为2}fun();console.log(a); // 值为2,因为函数执行完毕后虽然空间被销毁,但函数却改变了全局变量a的值
例3:
var a = 1;
function fun() {console.log(a); // 值为1,因为局部环境中没有变量a,因此沿着作用域链向上找到全局变量a,直接引用。因为作用域链本质上是一个指向变量对象的指针列表,只引用但不包含实际变量对象。
}
四、对象的属性与全局变量的关系
全局变量相当于window对象的属性,可以变量or属性的方式访问;而其他对象的属性则仅能以属性的形式存在(调用)。他们相互之间不会覆盖,因为本质上是两个变量。
例1:
a = 1; // 声明一个全局变量,相当于window.a
var obj = new Object(); // 创建一个普通对象实例
obj.a = 2; // 给对象添加一个属性a,与全局变量a同名
console.log(obj.a); // 输出2,因为这2个a不是同一个,一个是全局变量a,一个是对象的属性a
例2:
function Foo() {getName = function () { // 声明一个全局变量并赋值一个函数console.log(1);return this;}
}Foo.getName = function () { // 给Foo函数对象添加一个getName属性并赋值一个函数console.log(2);
}Foo.prototype.getName = function () {console.log(3);
}var getName () = function () { // 声明一个全局变量并赋值一个函数console.log(4);
}function getName () { // 在全局作用域下声明一个函数console.log(5);
}<!--开始调用函数-->
Foo.getName(); // 输出2,此时调用的getName不是全局变量getName里定义的函数,而是Foo函数对象的属性getName
getName(); // 输出4,此时调用的是全局变量getName里存的函数
Foo().getName(); // 输出1,此时调用了Foo函数使全局变量getName的值改变
getName(); // // 输出1,同理,因为调用了Foo函数使全局变量getName的值改变
new Foo.getName();
javascript全局变量和局部变量详解相关推荐
- python中全局变量和局部变量详解_Python全局变量与局部变量详解
Python全局变量与局部变量详解#Python中的变量:全局变量和局部变量 #在很多语言中,在声明全局变量的时候,都喜欢把全局变量的名称定义为大写 #定义学生人数为100 STUDENT_NUMBE ...
- python成员变量和全局变量_python 全局变量和局部变量详解笔记
python,数据分析,有相关问题欢迎留言交流. 一.问题引入 在写爬虫进行批量命名时,比如说常用的解析网页时 url这个变量就是跨函数的.涉及到全局变量和局部变量的设置. 二.全局变量与局部变量的区 ...
- python中全局变量和局部变量详解
写在最前面: python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问. !!! 我们先来看一个最简单的例子,事实上这并不是一个真正的全局变量,只是在类中的一个 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- 站长在线Python教程精讲:在Python函数中的局部变量详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的局部变量详解>.本文的主要内容有:变量的作用域的概念.局部变量的概念.局部变量的举例. 目录 1.变量 ...
- 众望所归的《JAVASCRIPT凌厉开发--EXT详解与实践 》终于上市了!
大家好,我是这本书的策划编辑,经过努力,这本书终于上市了. 从创作开始,我们的目标就是写一本真正适合开发者参考和借鉴的EXT书,写作过程中,经过了无数次讨论和痛苦修订,感谢三位作者付出的艰辛劳动. 这 ...
- JavaScript中getBoundingClientRect()方法详解
JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...
- JavaScript Function.arguments 属性详解
转载自 JavaScript Function.arguments 属性详解 arguments属性是正在执行的函数的内置属性,返回该函数的arguments对象.arguments对象包含了调用 ...
- Javascript this关键字 指向详解
Javascript this关键字 指向详解 面向对象语言中 this 表示当前对象的一个引用.在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变. 1) 单独使用 ...
最新文章
- DB2 创建数据库、缓冲池和表空间
- Android .mk文件语法解析
- a good resource gathering system from sustech
- linux手动注入网络数据_Linux网络 - 数据包的接收过程
- Linux(debian7)操作基础(四)之CPU频率调整
- flutter 获取定位_Flutter 实现高德定位
- [转载] python 函数参数类型检查
- 圆检测——最小二乘法拟合圆的推导
- 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法
- 小米10青春版刷鸿蒙,没有高刷弱不禁风?小米10青春版刷新低价,这次用户或许会满意!...
- winhex基础教程(更新中)
- 计算机的音量找不到了,win7旗舰版64位系统右下角音量小喇叭图标不见了怎么找回...
- linux查询过滤文件名后缀,在linux下搜索文件 文件名后缀
- 【Linux】解决Centos软件安装源出错
- 登录双token方案
- TB-RK3399Pro 找不到网络图标,如何连wifi呢?
- Android PAI (PlayAutoInstall)功能一些经验
- windows中域、工作组、用户组、域控的概念
- 共享内存(shmget函数详解)
- #ifdef _cplusplus(转)