javascript 作用域链实例

本文通过多个实例详细解析了JavaScript中的作用域链、变量初始化顺序及函数执行环境的创建过程,帮助读者深入理解JavaScript的运行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

var func1={
    name:"a",
    test: function(){
     alert(this.name);
   }
 } 
  name="global";
  func1.test();
  func=func1.test;
  func();
  function func2(){
  var name="func2";  
  func();
}
 func2();


输出结果是:a ,  global  ,global ;

解析:执行func1.test()时,this的指向func1,因此输出a;执行func()时,func引用test(),test()函数的作用域链最顶端是自己的活动对象,下一个就是全局作用域,在自己的活动对象里找不到name,顺着作用域链找到全局作用域中的global;func2()原理与func()执行时相同。

 2 .
 var xxx=1234;
   function test(xxx){
         alert(xxx);
        var xxx=123;
       function xxx(){}
       alert(xxx);
     }
       test(444);


输出结果:1.function xxx(){}  2.  123

解析:
这主要考察了函数执行时初始化顺序:函数被执行时,首先创建执行环境(执行上下文),构建该环境时,1.首先创建arguments变量,包含了传入的参数,2 .创建创建作用域链  ,3 。初始化变量,首先会初始化函数的形参表,值为arguments里面中对应的值,如果arguments中没有对应的值,则形参为undefined  ,4。初始化内部函数 ,5, 初始化函数内部的局部变量(undefined) 6. 最后当执行环境创建成功后,局部变量赋值 。
  因此,在执行test(444)时,xxx为形参,值为444;进入test()函数时,首先初始化function xxx(){},此时xxx为function;接下来执行到alert(xxx),输出function xxx{};向下执行到var xxx=123,此时xxx=123,alert(xxx),输出123.

3.
if(!("a"  in  window)){
     var a =1;
}
 alert(a);


输出:undefined;
 
解析: 刚开始a 为undefined ,undefined in window 返回true ,所以它是进不了if()

4.
var a=1,
   b=function a(x){
           x&&(--x);
             };
  alert(a);


输出:1 

解析: 方法a()的调用只能在function a(){}的内部调用,外部调用只能调用b();
5.
function superType(){
        a="global";
       this.b="xxx";
}

 var c=new superType();
 alert(a);
 alert(b);


解析:第一个输出global 第二个报错,因为this指向了c。

6.
var condition=true;
  
  if(conditon){
   function() sayHi{
   alert("Hi");   
       }
   }else{
    function sayHi(){
      alert("Yo");
    }
  }


解析:除了Firefox输出Hi之外,其他的都输出Yo;

 7.

function  b(x, y ,a){
      arguments[2]=10;
      alert(a);
   }
   b(1,2,3);


解析:输出10,arguments每个值和形参是引用关系。


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值