面试题:让javascript函数仅执行一次

题目是这样的:
function a() {}
a();
a();
多次调用的时候 只让它执行一次。

lodash.one 的实现
另一种实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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(); // nothing
或者是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function test () {console.log('test')}
var once = function (fn) {
var isFirst = true;
return function () {
if (isFirst) {
isFirst = !isFirst;
fn();
}
};
};
var b = once(test);
b(); // 'test'
b(); // nothing

其实实现的原理还是通过闭包的形式 通过一个flag标志来记录是否被调用过, 有的话就标记为true 然后再置为false这样的。

0%