`
chourentang
  • 浏览: 57719 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JavaScript链式作用域

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

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

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

function test() {
	alert(x);
}

test();

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

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

test();

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics