js的this论,let与var

175 阅读1分钟

js的函数上下文

先来个小梨子



 	function A() {
            this.m = 10;
        }
        function B() {
            this.m = 20;
        }
        A.call(B);  
        B.call(A);  
        
        let a = new A();    
        let b = new B();    
        
        console.log(a.m==B.m);  // true
        console.log(b.m==A.m);  // true
   
    

不废话,上代码,说结论。


	let a = 20;
        let obj = {
            a:10,
            b:function(){
                return this.a++;
            }
        }
        console.log(obj.b());   //10
        console.log(obj.a);     //11
        
	var a = 20;
        let obj = {
            a:10,
            b:function(){
                setTimeout(function(){
                    console.log(this.a);	//20
                    
                },100);
            }
        }

        obj.b();

But,var换成let,会怎样呢?


	let a = 20;
        let obj = {
            a:10,
            b:function(){
                setTimeout(function(){
                    console.log(this.a);	//undefined
                    
                },100);
            }
        }

        obj.b();
		

结果是:undefined

结论:let有个小特性,就是在全局(也就是window)下,用let声明的变量不再属于window。

->来个小案例练练手吧


       var b = 20;
       const obj = {
            b:10,
            c:function(){
                setTimeout(function(){
                    return this.b++;
                },100);
            }
       }

      console.log(obj.c());
      

测测打印的结果是什么?