美文网首页
[JavaScript基础] this,arguments

[JavaScript基础] this,arguments

作者: Darkdreams | 来源:发表于2018-12-28 14:11 被阅读0次

    函数预编译过程 this 指向 window

    全局作用域 this 指向 window

    function test() {
       console.log(this)   //指向window
    }
    test()
    

    call / apply 可以改变函数运行时 this 指向

    obj.func() func()里面的this指向obj

    var name = "JIM"
    var obj = {
      func : function() {
        console.log(this.name)
      },
      name : "Tom"
    }
    obj.func()   // Tom
    

    面试题

    var name = "222";
    
    var a = {
      name : '111',
      say : function() {
        console.log(this.name)
      }
    }
    
    var fun = a.say;
    fun();  //222
    // 执行fun方法是在全局,所以this指向全局,name是222
    a.say();  // 111
    // 执行say()方法是在a对象的作用域下,this指向a对象,name是111
    var b = {
      name : "333",
      say: function(fun) {
        fun(); //a.say
      }
    }
    b.say(a.say); //222
    
    b.say = a.say;  
    // 相当于
    //var b = {
    //  name : "333",
    //  say: function(fun) {
    //    console.log(this.name)
    //  }
    //}
    b.say();  //333
    // 相当于上面的注释,b对象的say()方法与a对象的say()相同。执行时在b对象中,this指向b对象。
    

    arguments

    arguments callee 指向函数自身引用

    function test() {
      console.log(arguments.callee) 
    }
    test();  //fn test
    
    //计算阶乘,用递归自己调用自己
    //但立即执行函数没有方法名,使用arguments.callee获取自身。
    var num = (function(n) {
      if (n  == 1) {
        return 1;    
      }
      return n * arguments.callee(n - 1)
    }(20))    // 2432902008176640000
    

    func.caller

    严格模式下,无法使用。

    相关文章

      网友评论

          本文标题:[JavaScript基础] this,arguments

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