EDICIÓN 2: ¿Por qué esta pregunta tan específica se marcó como un duplicado de esta muy conceptual: ¿Cuál es la diferencia entre pasar por referencia y pasar por valor? . Si alguien más tuviera la misma pregunta que yo, no terminaría con esta en Google buscándola e, incluso si la tuviera, no respondería a su pregunta.
EDITAR: Gracias a todos por su ayuda hasta ahora. Cosas bastante difíciles de entender desde mi punto de vista. La razón por la que hago esto es porque configuré una función a la que llamo varias veces y en la que defino una variable (una única con cada llamada). Necesito poder referirme a cada variable única después. Aquí está mi código de intento real a continuación. ¿Cuál sería la forma correcta de hacer esto?
let newSeq1 let newSeq2 function sequenceClip(sample, length, sequenceVariable) { let currentPosition = Tone.Transport.position let whenToStart if (currentPosition === '0:0:0') { whenToStart = '0:0:0' } else { const barToStartOn = +currentPosition.slice(0, currentPosition.indexOf(':')) whenToStart = `${barToStartOn + 1}:0:0` } sequenceVariable = new Tone.Sequence((time, note) => { sampler.triggerAttackRelease(note, '4m', time) }, [sample], length).start(whenToStart); } loop1.addEventListener('mousedown', () => { sequenceClip("C3", '1m', newSeq1) }) loop2.addEventListener('mousedown', () => { sequenceClip("C#3", '4m', newSeq2) })¿Cómo paso una variable a una función en Javascript para que se le asigne un valor? P.ej:
¿Por qué a la variable no se le asigna el valor 5? ¿Y cuál es la forma de evitar esto?
let a function defineVariable(var2beDefined) { var2beDefined = 5 } defineVariable(a) console.log(a === 5)Reasignar un identificador, por sí solo, nunca tiene efectos secundarios (en la mayoría de las circunstancias): el único cambio resultante de someIdentifier = someNewValue será cuando otras partes del código hagan referencia a ese mismo someIdentifier .
Si desea pasar algo para que se le asigne, pase una función que, cuando se llame, se asigne a la variable externa.
let a; function defineVariable(callback) { callback(5); } defineVariable(newVal => a = newVal); console.log(a === 5)La única vez que la asignación a un identificador tendrá efectos secundarios es si:
arguments también se cambiará)Por lo general, escribiría una función de inicialización que devuelva un valor y asignaría ese valor de retorno a la variable global relevante. Por ejemplo:
let newSeq1 let newSeq2 function sequenceClip(sample, length, sequenceVariable) { let currentPosition = Tone.Transport.position let whenToStart if (currentPosition === '0:0:0') { whenToStart = '0:0:0' } else { const barToStartOn = +currentPosition.slice(0, currentPosition.indexOf(':')) whenToStart = `${barToStartOn + 1}:0:0` } return new Tone.Sequence((time, note) => { sampler.triggerAttackRelease(note, '4m', time) }, [sample], length).start(whenToStart); } loop1.addEventListener('mousedown', () => { newSeq1 = sequenceClip("C3", '1m') }) loop2.addEventListener('mousedown', () => { newSeq2 = sequenceClip("C#3", '4m') }) Tenga en cuenta que tanto newSeq1 como newSeq2 no estarán definidos hasta los primeros eventos mousedown/mouseup.