美文网首页
js 函数上下文练习

js 函数上下文练习

作者: 查理斯_Chalis | 来源:发表于2018-12-04 20:15 被阅读0次
       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函数直接圆括号执行

    相关文章

      网友评论

          本文标题:js 函数上下文练习

          本文链接:https://www.haomeiwen.com/subject/miwvcqtx.html