js 函数上下文练习

2018-12-04  本文已影响0人  查理斯_Chalis
   var a = 10;
     var obj = {
         a:1,
         b:2,
         c:[{
              a:3,
              b:4,
              eat:function(){
                  console.log(this.a);
              }
         }]
     }
     // obj.c[0].eat();
     // 解题思路:
     // obj.c[0]  数组c里的第一个对象
     // obj.c[0].eat  对象里的匿名函数
     // obj.c[0].eat() 匿名函数被数组c里的第一个对象调用,this指向数组c里的第一个对象
     // this.a    this指向数组c里的第一个对象的属性a


      function fun(m,n,o,p,q,r){
          alert(this.callee.length)
      };

      function f(a,b){
 
         arguments[0](9,10,11,12,13);

     };

    // f(fun,5,6,7);
    // 解题思路
    // f(fun,5,6,7)     f函数执行并且往里面传递了实参fun,5,6,7
    // arguments[0](9,10,11,12,13)  f函数执行, 枚举出实参数组里的第一项(函数fun)并且执行
    // this   被调用的函数fun的this指向f的实参数组   [fun,5,6,7]
    // this.callee.length  为f的实参数组里的属性(指向f函数本身),形参个数为2

       var a = 4;
       function b(x,y,a){
          alert(a); //3
          arguments[2] = 10; //动态将b函数实参数组中的第三项改为10
          alert(a); //10
       }
       // a = b(1,2,3);
      //     alert(a);
      // b(1,2,3)  b函数执行并且往里面传递了实参 1,2,3
      // a = b(1,2,3);  b函数作为返回值传给变量a 但是b函数中没有return 默认为undifined 所以a为undifined

      
      function fun(f,a,b,c){
         arguments[0](5,6);//fun的实参数组的第一项(fn)执行,并且给fn中传入实参
     }
     function fn(p,q,r,s,t){
        alert(this.length);//fun的实参数组的个数
        alert(this.callee.length); //fun的形参的个数
        alert(arguments.length); // fn的实参个数
        alert(arguments.callee.length);//fn的形参个数
     };
    // fun(fn,8,9,10,11,12);  fun函数执行并且往里面传递了实参 fn,8,9,10,11,12

    
         var c =1000;
         var obj = {
           "a":function(){ 
              return this.b;
           },
           "b":function f(){
            
              return this.c;
           },
           "c":1
          };
var result = obj.a()();
console.log(result);
  // obj.a 拿到属性a的匿名函数
  // obj.a() 匿名函数执行 返回值为this.b this指向当前对象obj this.b为属性b的匿名函数
  // obj.a()() 属性为b的匿名函数执行 这个函数是通过圆括号调用的 里面的this指向window 返回值为window中的c
              //相当于b函数直接圆括号执行
上一篇 下一篇

猜你喜欢

热点阅读