作用域链

javaScript作用域,自由变量

  1. 自由变量:在A的作用域下使用变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于作用域A来说,x就是一个自由变量。
var x;
function fnA(){
    x = 1;
    b = x;
}
  1. js作用域及作用域链
    • 定义:作用域也称为执行环境。
    • 当代码在一个环境中执行时,会为变量对象创建一个作用域链,这个作用域链会保证对执行环境有权访问的所有变量和函数的有序访问。
      (每一个执行环境都有与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中,我们编写的代码无法访问)。
    • 内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境的任何变量和函数。
    • 执行环境也成为作用域,执行环境决定了变量的生命周期。
var name = 'name1';
function changeName(){
    var anotherName = 'name2';
    function changingName(){
        var temp = anotherName ;
        anotherName = name ;
        name = temp ;
        //作用域1
    } 
    changingName();
    //作用域2
}
changeName();
//作用域3(全局环境)

  
   作用域链实际上就是我们可以通过它从前端到末端可以访问的范围。
3. 面试题的练习

类型一

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


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

类型二

function aaa(){
   a=10; 
}
aaa();
alert(a);   //


function aaa(){
   var a=b=10; 
}
 aaa();
 alert(a);   //
 alert(b);   //

类型三

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

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

可以解析为:
var a=10;
function aaa(){
  var a; 
  alert(a);
  a=20;
}
aaa();

类型四

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

类型五

var a=[1,2,3];
var b=a;
b.push(4); 
alert(a);

当b重新被赋值的时候 a不会改变.示例:
var a=[1,2,3];
var b=a;
b=[1,2,3,4]
alert(a);

4 . 答案
https://www.cnblogs.com/hfxm/p/5547922.html
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值