在闭包中保存价值
Save value inside closure
我有一个对象 属性 onProgress
。 属性 是一个接收秒数作为参数的函数,每当我的播放器更改它的持续时间时都会调用它。我想要做的是,在这个函数中,创建一个名为 oldSeconds
的 属性。我想要 console.log
oldSeconds
变量和 currentSeconds
。在这种情况下,oldSeconds 将始终比当前秒数少 1 秒。
问题在于 oldSeconds
始终为 0,因为该函数在每次调用时都会更新其值。无需在函数外部创建 oldSeconds
变量即可实现此目的?
对象:
var opts = {
onProgress: function(seconds) {
var oldSeconds = 0
return function() {
console.log('Seconds:', seconds, 'OldSeconds:', oldSeconds)
oldSeconds = seconds
}
}
}
函数调用如下:
onProgress(1) // here oldSeconds should be 0
onProgress(2) // and here oldSeconds should be 1
编辑:
我成功了。所以函数应该这样重写:
var opts = {
onProgress: function() {
var oldSeconds = 0
return function(seconds) {
console.log('seconds:', seconds,'oldSeconds:', oldSeconds)
oldSeconds = seconds
}
}
}
var progress = opts.onProgress()
progress(1)
progress(2)
等等。
问题是我不想做
var progress = onProgress()
因为 onProgress
函数并不总是像那个函数那样的函数(它可以是通用函数)。
那么 'detect' 函数 returns 怎么关闭并做我想做的事情呢?
您的代码很接近,但参数在错误的位置并且您缺少包装器的函数调用:
var opts = {
onProgress: function() {
var oldSeconds = 0
return function(seconds) {
console.log('Seconds:', seconds, 'OldSeconds:', oldSeconds)
oldSeconds = seconds
};
}() // <-- call the wrapper function
}
现在 "onProgress" 属性 将使用 调用 该匿名函数的结果进行初始化。该结果将是稍后作为 obj.onProgress()
调用的实际函数,因此这就是 "seconds" 参数需要的地方。
我有一个对象 属性 onProgress
。 属性 是一个接收秒数作为参数的函数,每当我的播放器更改它的持续时间时都会调用它。我想要做的是,在这个函数中,创建一个名为 oldSeconds
的 属性。我想要 console.log
oldSeconds
变量和 currentSeconds
。在这种情况下,oldSeconds 将始终比当前秒数少 1 秒。
问题在于 oldSeconds
始终为 0,因为该函数在每次调用时都会更新其值。无需在函数外部创建 oldSeconds
变量即可实现此目的?
对象:
var opts = {
onProgress: function(seconds) {
var oldSeconds = 0
return function() {
console.log('Seconds:', seconds, 'OldSeconds:', oldSeconds)
oldSeconds = seconds
}
}
}
函数调用如下:
onProgress(1) // here oldSeconds should be 0
onProgress(2) // and here oldSeconds should be 1
编辑:
我成功了。所以函数应该这样重写:
var opts = {
onProgress: function() {
var oldSeconds = 0
return function(seconds) {
console.log('seconds:', seconds,'oldSeconds:', oldSeconds)
oldSeconds = seconds
}
}
}
var progress = opts.onProgress()
progress(1)
progress(2)
等等。
问题是我不想做
var progress = onProgress()
因为 onProgress
函数并不总是像那个函数那样的函数(它可以是通用函数)。
那么 'detect' 函数 returns 怎么关闭并做我想做的事情呢?
您的代码很接近,但参数在错误的位置并且您缺少包装器的函数调用:
var opts = {
onProgress: function() {
var oldSeconds = 0
return function(seconds) {
console.log('Seconds:', seconds, 'OldSeconds:', oldSeconds)
oldSeconds = seconds
};
}() // <-- call the wrapper function
}
现在 "onProgress" 属性 将使用 调用 该匿名函数的结果进行初始化。该结果将是稍后作为 obj.onProgress()
调用的实际函数,因此这就是 "seconds" 参数需要的地方。