js闭包的问题

码出春天 2014-12-07 04:18:28

var f=function(){
var t=new Date();
f=function(){
return t;
}
return f();//闭包不是应该return 一个函数么,这里怎么把它执行了?
}
f();

据说这是一个闭包,我没看懂啊,球大哥大姐们指点
...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
码出春天 2014-12-08
  • 打赏
  • 举报
回复
引用 7 楼 xiongweiyu88 的回复:
这是一个典型的闭包,内部函数,可以获取函数外部变量。可参考http://www.itzlk.com/jskernel/457.jhtml
这个不错,谢了
码出春天 2014-12-08
  • 打赏
  • 举报
回复
引用 6 楼 jslang 的回复:
哦,原来是这样的要求啊,那你这个代码就没有问题了。 f ()不管是首次调用还是再次调用就是要求返回t的值,没有要求返回一个函数。只不过在首次调用时f函数会重新定义自身 这个代码也可以改成如下

var f=function(){
  var t=new Date();
  f=function(){
    return t;
  }
  return t;
 }
f();

貌似懂了,谢谢
天际的海浪 2014-12-07
  • 打赏
  • 举报
回复
哦,原来是这样的要求啊,那你这个代码就没有问题了。 f ()不管是首次调用还是再次调用就是要求返回t的值,没有要求返回一个函数。只不过在首次调用时f函数会重新定义自身 这个代码也可以改成如下

var f=function(){
  var t=new Date();
  f=function(){
    return t;
  }
  return t;
 }
f();

码出春天 2014-12-07
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
你这个代码有问题

var f=function(){
  var t=new Date();
  var f=function(){//这里要用var把F声明成局部变量,不然就是重定义了全局的f函数
    return t;
  }
  return f;//你想要return 一个函数,就不要写() 
}
var e = f();
alert(e());

谢谢, 我是在一本书上看到的这样一个例子,书上是这样解释的:函数f的首次调用将实例化一个新的Date对象并重置f到一个新的函数上,f在其闭包内包含Date对象。在首次调用结束之前,f的新函数值也已被调用并提供返回值。函数f的调用都只会简单的返回t保留在其闭包内的值,这样执行起来非常高效。 没看懂
码出春天 2014-12-07
  • 打赏
  • 举报
回复
引用 2 楼 zzgzzg00 的回复:
先定义一个f函数 不管他是做什么的 之后执行f 此时重写f 这是f是一个返回t对象的函数 返回f的执行结果 即返回t
谢谢, 那这样写还是一个闭包的形式么?
天际的海浪 2014-12-07
  • 打赏
  • 举报
回复
你这个代码有问题

var f=function(){
  var t=new Date();
  var f=function(){//这里要用var把F声明成局部变量,不然就是重定义了全局的f函数
    return t;
  }
  return f;//你想要return 一个函数,就不要写() 
}
var e = f();
alert(e());

似梦飞花 2014-12-07
  • 打赏
  • 举报
回复
先定义一个f函数 不管他是做什么的 之后执行f 此时重写f 这是f是一个返回t对象的函数 返回f的执行结果 即返回t
天际的海浪 2014-12-07
  • 打赏
  • 举报
回复
return f;//你想要return 一个函数,就不要写()

87,917

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧