手记

关于闭包的一些小心得

var name = "The Window";  
var object = {    
  name : "My Object",    
  getNameFunc : function(){
   return function(){ 
   return this.name;
   };
   }  
};  
alert(object.getNameFunc()());//The Window


object.getNameFunc()()

首先执行的是

object.getNameFunc() //一个括号

返回的是

function(){
   return function(){ 
   return this.name;
   };

再执行的是

object.getNameFunc()() //两个括号

也就是

(function(){
   return function(){ 
   return this.name;
   })();

在上面这个函数里,
this.name 在他的函数体里是找不到具体对象的
因此 this会指向window 。
在函数里使用,this指向函数对象本身
匿名函数执行环境具有全局性,全局性的this指向window。

那么在这里 this.name会在全局变量里找
var name = "The Window";
实际的意思是 给window 对象 加了一个name属性
所以 this.name == window.name == "The Window";
如果想返回My Object

var name = "The Window";  
var object = {    
  name : "My Object",    
  getNameFunc : function(){
var that = this ; //把this赋值给that这个变量 保存到这个函数里 (getNameFunc )
   return function(){ 
   return that.name; //在这里使用
   };
   }  
};  
alert(object.getNameFunc()()); //My Object

9人推荐
随时随地看视频
慕课网APP

热门评论

第二次的this又指的是什么

i dont believe

简直了 发的评论是代码 谁能看懂呢😊

查看全部评论