作用域js和java区别_[Java教程]js之作用域

[Java教程]js之作用域

0

2018-10-28 19:33:02

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 会怎样呢  --- 大家可以试试哦

本文网址:http://www.shaoqun.com/a/448517.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JS

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值