var name = 'Jansen'; console.log(this.name); //Jansen
這個不用說,直接在最外面引用this,this直接指向的是window對象,js中聲明的全局變量都會掛載到window上。閉包
var name = 'Jansen'; function getName(){ console.log(this.name); } getName();
這個其實也是同樣的,調用了函數,依然去找this.name屬性,跑到了window那裏去找了app
var obj1 = { name:'test', myFun:function(){ console.log(this.name); } } obj1.myFun();//test
這裏的this,直接指向obj1這個對象函數
var name = 'Jansen'; function getName(name){ this.name = name; console.log(this.name); } var obj2 = new getName('ops'); obj2.name // ops
這裏的this經過new建立的對象,this指向的是obj2this
var name = 'Jansen'; var obj3={ name:'test' } function getName(){ console.log(this.name) } getName.apply(obj3)
這裏經過apply的方式把this的指向從window換給了obj3code
var name = "Window"; var object = { name : "object", getName : function(){ console.log(this.name); function backFn(){ console.log(this.name); }; return backFn; } };
這裏的第一塊的this就是指向的object,可是存在了一個閉包的概念,因此backFn裏的this,經過return從新掛回了window。對象
閉包就是可以讀取其餘函數內部變量的函數。get