了解 David Walsh 的 once 函数
Understanding David Walsh's once function
我在这里看到了 David Walsh 的 once
函数:
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
// Usage
var canOnlyFireOnce = once(function() {
console.log('Fired!');
});
canOnlyFireOnce(); // "Fired!"
canOnlyFireOnce(); // nada
我的问题是这里的 tracker
变量是什么?每次 canOnlyFireOnce()
被触发时 result
不会变成 null
吗?将 fn
设置为 null 的目的是什么?
fn
是跟踪它是否被调用的变量。你可以用更明确的额外变量这样写:
function once(fn, context) {
var result;
var called = false;
return function() {
if (!called) {
result = fn.apply(context || this, arguments);
called = true;
}
return result;
};
}
我想设置fn = null
可以释放一些内存,所以他也想在调用后这样做。那么为什么不也用它来记住电话呢。
这里的fn是tracker变量。 fn 变量保存匿名函数。在调用一次 canOnlyFireOnce 函数后,fn 变量获得一个新值“null”。现在 fn(匿名函数)不再可用于执行,这就是为什么您不会看到“被解雇!”的原因。再次留言。
我在这里看到了 David Walsh 的 once
函数:
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
// Usage
var canOnlyFireOnce = once(function() {
console.log('Fired!');
});
canOnlyFireOnce(); // "Fired!"
canOnlyFireOnce(); // nada
我的问题是这里的 tracker
变量是什么?每次 canOnlyFireOnce()
被触发时 result
不会变成 null
吗?将 fn
设置为 null 的目的是什么?
fn
是跟踪它是否被调用的变量。你可以用更明确的额外变量这样写:
function once(fn, context) {
var result;
var called = false;
return function() {
if (!called) {
result = fn.apply(context || this, arguments);
called = true;
}
return result;
};
}
我想设置fn = null
可以释放一些内存,所以他也想在调用后这样做。那么为什么不也用它来记住电话呢。
这里的fn是tracker变量。 fn 变量保存匿名函数。在调用一次 canOnlyFireOnce 函数后,fn 变量获得一个新值“null”。现在 fn(匿名函数)不再可用于执行,这就是为什么您不会看到“被解雇!”的原因。再次留言。