作用域及作用域链

作用域

概念:变量的有效范围

栗子:

var a = 10;
function fn() {
  alert(a)
}


function fn1(){
  var a=20;
  fn()
}

fn1(); // 10

a =10 是全局的 而a=20 是局部的

var a=10
function fn(){
    alert(a);
    var a=20
}
 
fn();   // undefined,一是预解析,二是就近查找。

变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。

var a = 10
 function fn(){
    alert(a)
    a=20
}
fn();  // 10

这个虽然是就近原则,但是就近找var声明的变量,因为a= 20 没有var声明,只是修改了a 的值,所以到外面去找了,输出的是10。不过没错的是a=20后,a确实为20了,只不过alert的时候还没有执行到那~~

var a = 10
 function fn(){
   a=20
   alert(a)
}
fn();  // 20
var a=10
function fn(){
    fn1();
    alert(a);
    function fn1(){
       var a=20
  } 
}
fn();  // 10
 var a=10;
 function fn(a){
    alert(a)
    var a= 20;
 }
 fn(a)   // 10

作用域链

一般情况下,变量取值到创建这个变量的函数的作用域中取值。但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。
作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容