2016-01-08 4 views
1

Я предполагаю, что можно создать функцию JavaScript, которая отключит ее самостоятельно после ее выполнения.Отключить функцию JavaScript после ее запуска

Возможно ли? Как этот эффект может быть достигнут?

+0

Можете ли вы объяснить случай использования? также что вы подразумеваете под отключением? –

+1

Вы имеете в виду функцию javascript или хотите отключить 'javascript' –

+0

Если вы хотите запускать функцию только один раз, вы должны изучить' IIFE'. Эти функции выполняются немедленно и не могут быть вызваны. – Rajesh

ответ

2

Wrap произвольным работоспособным в следующем порядке:

function once(subject) { 
    var first = true; 
    return function() { 
    if (first) { 
     first = false; 
     return subject(); 
    } else { 
     return null; 
    } 
    }; 
} 

var wrapper = once(function() {alert("No more!");}); 

wrapper(); // alerts 
wrapper(); // noop 

Runnable будет выполнен только при первом вызове обертки.

convert a function of arbitrary arguments to an argumentless runnable.

2

что-то вроде этого?

function a(){ alert(1); a = null;} 

Invoke a() один раз, второй раз он будет говорить

Uncaught TypeError: a is not a function 

если функция является анонимной, а затем сделать его IIFE

(function(){ alert(1);})(); 
+1

** Никогда не сдавайтесь **! :) – void

+1

Ницца ... узнал что-то новое. – void

+1

@void спасибо, наконец :) – gurvinder372

1
var _flag = true; // Have a flag variable. 

function oneTimer(){ 

    // Check flag is set to true or not 
    if(!_flag) return; 
    _flag = false; 

    // Your function definition here. 


} 
+1

downvoters? помочь объяснить? – void

+0

Вы используете переменную, объявленную во внешней области функции. Принятый «один раз» функциональный декоратор - это гораздо лучшее решение, поскольку все в нем заключено, поэтому проблем с «чистой» функцией не может быть. Кроме того, это не будет использоваться повторно, 'once' можно использовать для любой функции, но если вы хотите сделать то же самое с другой функцией, вам нужно будет сделать что-то вроде' _flag_2', которое может быстро запутаться. – synthet1c

1

Как отмечалось, если вы хотите выполнить функцию только один раз, попробуйте IIFE. Эти функции вызывают немедленно и не могут быть вызваны впоследствии.

Ниже приведен пример кода.

(function test() { 
 
    console.log("test"); 
 

 
    (function innerFunc() { 
 
    console.log("Inner Function"); 
 
    })(); 
 

 
    try { 
 
    innerFunc(); 
 
    } catch (ex) { 
 
    console.log(ex) 
 
    } 
 
})(); 
 

 
try { 
 
    test(); 
 
} catch (ex) { 
 
    console.log(ex) 
 
}

2

Если вы хотите функциональность быть только в том случае, когда вы можете использовать следующую функцию

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 

Предоставлено: https://davidwalsh.name/essential-javascript-functions

1

Довольно легко, просто назначить пустой функция к функции:

function once() { 
 
    alert('once'); 
 
    once = function() { }; 
 
} 
 

 
once(); 
 
once();

Смежные вопросы