无论这个函数调用多少次,返回的都是第一次调用时候的结果。
惰性函数的意思就是,这个事儿我做了一次之后就再也不做了,你再怎么调用我,我也只能给你我第一次完成时的东西。
代码简单啊, 刚看到代码的我,蒙圈了~
var foo = function(){
var t = new Date()
foo = function(){
return t
}
return foo()
}
看不懂怎么办?作为前端小白的自我修养,我默默的打开了chrome调试工具。
在作用域里面,t已经有了。foo最初指向的是最外层的函数,下面即将改变foo的指向。
t
进入了闭包中,foo
指向的是里面的函数,在后面多次的foo()
调用中,都是调用的function(){return t}
,由于闭包,t
一直被保存着。每次执行都返回了t
。
这样看来就很简单了。
整个代码第一次调用,生成了一个t = Thu Jul 25 2019 11:11:09 GMT+0800 (中国标准时间)
。然后被存储了起来。
而foo
则指向了一个新的函数,最外层函数在返回foo()
之后,就失去了作用。上面执行六次foo()
函数,只有第一次是执行的最外层函数,后面五次都是新的函数。