js之作用域
2018-10-29 15:27:49来源:博客园 阅读 ()
1.什么是作用域
作用域是用于收集存储维护变量,以及当前执行代码声明的变量所拥有的权限,
例如 :
function foo(a){
console.log(a); -------- 1
};
foo(666);
console.log(a); ------- 2
此时执行该段代码
1 -- 处打印我们得到 666 因为在函数中声明了 a 参数 且执行foo函数像里面传入666就相当于将a赋值为666 所以console.log 查询a可以获得666
2 --处打印我们获取一个报错 Uncaught ReferenceError: a is not defined 说a没有定义,这是为什么呢.
2.1 首先我们来说明下LHS 查询和RHS查询(书上给的解释是: 赋值操作的左侧或右侧)
我的理解是
LHS --- 被赋值的变量
RHS --- 查询变量的值
且这两种查询都是从本身所在作用域向上冒泡查询直到遇到定义的变量位置,
不同的是 :
1.RHS 在本作用域查询变量遇到不存在需要查询的变量则逐级向上一级作用域查询,查到则停止,否则直到到window作用域还没有查到则会返回一个 xxx is not defined
2.LHS 在本作用域查询变量遇到不存在需要查询的变量则逐级向上一级作用域查询,查到则停止, 到window作用域还没有查到则会默认再window 全局变量处偷偷的创建这个需要查询的变量
下面用一段简单的代码来说明 LHS 和 RHS
function foo1(a){
console.log(g)
//这里将会出现报错 g is not defined 因为这里执行的RHS查询 ,在查询g的时候发现foo作用域没有,所以向他的上一级window对象内查询也没有存在,所以返回not defined
console.log(a+g);
g = a;
}
foo1(666);
function foo2(a){
g = a;
//在FOO2函数中 a向g赋值 此时g在foo2作用域中也不存在,他也向上查询,遇到window对象,发现其中也没有定义g 变量,但是此时呢他就在window对象中创建了一个g对象,所以window对象中就有这个变量
console.log(a+g); ----- 打印控制台获得 4
}
foo2(2);
//如果将foo2中 g = a 换成 a = g 会怎样呢 --- 大家可以试试哦
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JS变量、作用域 2019-08-14
- 回流和重绘 2019-08-14
- 创建全局组件的三种方式 2019-08-14
- javascript —— this 2019-08-14
- 函数作用域查找、闭包和匿名函数整理 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash