definicion - Estilo de JavaScript: devoluciones de llamada opcionales
title css (9)
Tengo algunas funciones en las que querré ejecutar una devolución de llamada de vez en cuando, pero no siempre, ¿está comprobando si la devolución de llamada está definida / funciona con un buen estilo o hay una forma mejor?
ejemplo:
function save (callback){
.....do stuff......
if(typeof callback !== ''undefined''){
callback();
};
};
Agregando a lo que Pablo dijo, en el último ECMAScript esto es válido:
// @param callback Default value is a noop fn.
const wow = (callback = ()=>{}) => {
callback();
};
Tenga en cuenta que un usuario puede pasar algo más que una función y lo romperá.
Me cansé tanto de ver ese mismo fragmento una y otra vez. Escribí esto:
var cb = function(g) {
if (g) {
var args = Array.prototype.slice.call(arguments);
args.shift();
g.apply(null, args);
}
};
Tengo cientos de funciones haciendo cosas como
cb(callback, { error : null }, [0, 3, 5], true);
o lo que sea...
Soy escéptico de toda la estrategia de "asegurarme de que funcione". Los únicos valores legítimos son una función o falsy. Si alguien pasa un número distinto de cero o una cadena no vacía, ¿qué vas a hacer? ¿Cómo se puede ignorar el problema?
Me he sincedido movido a coffee-script y encontré argumentos por defecto es una buena manera de resolver este problema
doSomething = (arg1, arg2, callback = ()->)->
callback()
Si el criterio para ejecutar la devolución de llamada es que esté definido o no, está bien. Además, sugiero que verifique si realmente es una función adicional.
Simplemente hazlo
if (callback) callback();
Prefiero llamar a la devolución de llamada si se proporciona, sin importar de qué tipo sea. No permita que falle silenciosamente, por lo que el implementador sabe que aprobó un argumento incorrecto y puede solucionarlo.
También puedes hacer:
var noop = function(){}; // do nothing.
function save (callback){
callback = callback || noop;
.....do stuff......
};
Es especialmente útil si usa la callback
de callback
en algunos lugares.
Además, si está utilizando jQuery
, ya tiene una función como esa, se llama $.noop
Una función válida se basa en el prototipo de Función, use:
if (callback instanceof Function)
para asegurarse de que la devolución de llamada es una función
Yo personalmente prefiero
typeof callback === ''function'' && callback();
Sin embargo, el comando typeof
es dudoso y solo debe usarse para "undefined"
y "function"
¡Los problemas con el typeof !== undefined
es que el usuario puede pasar un valor que está definido y no una función