Quiero construir una pequeña biblioteca de JavaScript que se pueda usar así:
library('input').method() (async () => { // const nlp = function (text = '', lexicon) { const library = function (text) { const options = {} options.addQuotes = function (text) { return `"${text}"` } return options } const result= library('test').addQuotes() console.log(result) })() Se supone que library.addQuotes rodea el text entre comillas dobles.
Así que pensé que el result sería:
"test"En cambio, obtuve:
"undefined"¿Por qué es esto y cómo solucionarlo?
Al tener un parámetro adicional, está creando un text variable interno (alcance dentro de la función addQuotes). No pasa ningún valor y JS no tiene problema con eso, solo será undefined . Cuando JS busca una variable de text , encuentra este valor undefined y lo devuelve.
Elimine ese nombre de argumento adicional y estará bien.
(async () => { // const nlp = function (text = '', lexicon) { const library = function (text) { const options = {} options.addQuotes = function () { return `"${text}"` } return options } const result= library('test').addQuotes() console.log(result) })()El parámetro de text en la función addQuotes eclipsa la variable de text en el ámbito externo.
Elimina el parámetro de la función addQuotes :
(async () => { // const nlp = function (text = '', lexicon) { const library = function (text) { const options = {} options.addQuotes = function () { return `"${text}"` } return options } const result= library('test').addQuotes() console.log(result) })()