JavaScript链式作用域

[color=darkblue]网上介绍js链式作用域的很多,但写的很烦杂,不好理解,现在根据网络文章整理一个简单易懂的,如下:[/color]
[color=darkblue][b]1.理解js的链式作用域的前提[/b][/color]
1)首先要知道js的变量作用域,js的变量作用域就两种:全局和局部
2)js中当前作用域能过访问其上层作用域的变量和函数

[color=darkblue][b]2.js链式作用域的定义:[/b][/color]
JS权威指南的描述:
JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。
这句话很难理解,但是换做简单的描述,JS的链式作用域就是:
JS中当遇到对变量名或者函数名的使用时,会首先在当前作用域查找变量或者函数,如果没有找到,就会到其上层作用域中寻找,并以此类推。

下面这个例子在很多博文中引用:
var x = 10;

function test() {
alert(x);
}

test();

上面例子中弹出的值是什么? 答案是10,这个很好理解,因为上面提到:[color=red]2)js中上层对象中的变量和函数对其子对象都是可见的[/color]
下面对这个例子稍微变换下:
var x = 10;

function test() {
alert(x);
var x = 2;
}

test();

改变后的例子弹出的值是什么?答案是undefined,如果用java等其他编程语言的思维分析很理解,但利用JS链式作用域来理解,函数test在执行时,会先在其本身的作用域中寻找,而函数本中是定义了x的,就不会在向上层寻找,但是是定义在alert之后,因此alert会弹出undefined,如果函数内没有定义x,就像最初的例子,那么就会在其上层作用域寻找,就是10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值