1

Se puede obtener la variable b?

let a = function() {
  const b = 20;
}

console.log(a().b);
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
noseJ
  • 103
  • 5

5 Answers5

4

Te respondieron ya varios pero complementando, si quieres usar forzosamente la notación que pusiste a().b puedes hacer lo siguiente:

function a() {
  return {b: 20}
}
console.log(a().b)

o usando ES6

 let a = () => ({b: 20})
    console.log(a().b)
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • 1
    Excelente respuesta @AlejandroHernandez, edité un poco tu respuesta, te invito a realizar el [tour] del sitio, saludos! – Jorgesys Jun 20 '19 at 14:21
2

Puedes declarar una variable "global", que será modificada con el valor de b al llamar la función a:

var globalVariable;

let a = function() {
  const b = 20;
  globalVariable = b;
}

a();
console.log(globalVariable);

También podrías retornar el valor de b al llamar la función:

let a = function() {
  const b = 20;
  return b;
}

a();
console.log(a());
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • me ayudas con este porfavor https://es.stackoverflow.com/questions/273307/suma-mas-mayor-de-una-matriz – noseJ Jun 20 '19 at 04:09
1

Debería bastar con que retornes el valor; es decir que tu código quede de este modo:

    let a = function() {
      const b = 20;
      return b
    }
    
    console.log(a())
  • Estas declarando dentro del ámbito de la funcion una variable pero no estas retornándola
  • Imprime la variable a que al estar igualada con la función puede acceder al valor que esta regresa, escribiendolo así: a()
BetaM
  • 30,571
  • 7
  • 32
  • 50
1

Podemos obtener el código fuente de una función con el método toString. Podríamos acceder al valor de la variable b usando una expresión regular. Gracias a esto, podríamos acceder al valor de la variable sin ejecutar el código devolviendo el valor de la variable, ni usando variables globales. Técnicamente no obtienes la variable, pero si puedes obtener su valor.

Si queremos obtener el valor de la variable desde fuera del entorno de ejecución (por ejemplo, desde otro archivo), podríamos leer el archivo fuente y aplicar una expresión regular.

¿Para qué lo quiere? Realmente no debería importarnos. Si es por curiosidad, aquí tienes la demostración usando el método toString.

let a = function() {
  const b = 20;
}

// Con el método `toString` accedemos al código fuente
//   de la función
var codigoFuenteDeFuncion = a.toString();

// Aplicamos una expresión regular para obtener el valor
//   de la variable
var valorDeVariableInterna = /const\sb\s\=\s(.+);/.exec(codigoFuenteDeFuncion)[1];

console.log(valorDeVariableInterna);
0

La manera en como quieres obtener la variable es incorrecta ya que quieres igualar una variable (por el int que lleva delante imagino que deseas que sea entera aunque esa declaración también es incorrecta) con una función.

Lo que debes hace es declarar una variable por ejemplo de esta forma:

var a;

Por otro lado si quieres que la función te devuelva un entero debemos decirle que lo haga agregándole el return y un nombre para asi poder llamarla y darle la equivalencia a nuestra variable inicial, en otras palabras, una forma de expresar lo explicado sería:

var a = retornar();

function retornar() {
  var b = 20;
  return b;
}

console.log(a);
console.log(retornar()); // esta sería otra forma