Как получить доступ к переменной из функции в Javascript - PullRequest
0 голосов
/ 26 августа 2018

Я хочу получить доступ к переменным т.е.расстояние, vertex2Position, путь, который в двух отдельных функциях, внутри основной функции с именем getResult.Как я могу достичь этого, не меняя мой код или меняя код минимальным образом.

function getResult() {

document.getElementById("vertex1").onchange = function() {
  var vertex1 = document.getElementById("vertex1").value;
  var vertex1Position = graph.node.findIndex(e => e.id == vertex1) + 1;
 document.getElementById("output").textContent = vertex1Position;
 var distance = execute(vertex1Position);  // How can I access distance in my result variable
};

    var vertex2Position = 0;
    console.log("whats here");    
    document.getElementById("vertex2").onchange = function() {
        var vertex2 = document.getElementById("vertex2").value;
         vertex2Position = graph.node.findIndex(e => e.name == vertex2)+ 1; // I also want to access vertex2Position in my result variable which is in outer function
        document.getElementById("secondOutput").textContent = vertex2Position;
       var path = getPath(vertex2Position); //How can I access path in var result
    };

var result = distance.vertex2Position; // I want to store distance and vertex2Position in result variable

document.getElementById("searchResult").innerHTML = "test" + result + "" + path + "."; // I also want to access path 
}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы должны использовать что-то вроде этого:

var container = (function(){
 var distance;
 var vertex2P;
 return {
    setDistance: function(distance){
        this.distance = distance;
    },
    getDistance: function(){return this.distance;},
    setVertex2P: function(vertex2P){
        this.vertex2P = vertex2P;
    },
    getVertex2P: function(){return this.vertex2P;},


}}());

А затем вы можете получить и установить значения в других функциях, как это

var result = function(){
container.setDistance(2);
container.setVertex2P(3);
console.log(container.getDistance() + container.getVertex2P());
}
result(); // 5

Это (возможно) лучшие практикивы можете использовать его в Javascript, избегая глобальных переменных и добавляя конфиденциальность вашим переменным, надеясь, что это поможет вам.
PS Вы можете сократить это с ECMASCRIPT 6

0 голосов
/ 26 августа 2018

В javascript вы должны понимать, какие области видимости.В вашем коде основной областью действия является функция getResult (), поэтому, если вы хотите получить доступ к переменным внутри подфункций (функций внутри функции getResult ()), вам необходимо объявить переменные в начале этой основной области действия.

Пример:

function getResult() {
  var distance, 
      path, 
      vertex1,
      vertex2, 
      vertex1Position,
      vertex2Position = 0;

  document.getElementById("vertex1").onchange = function() {
    vertex1 = document.getElementById("vertex1").value;
    vertex1Position = graph.node.findIndex(e => e.id == vertex1) + 1;

    document.getElementById("output").textContent = vertex1Position;
    distance = execute(vertex1Position);  
  }

  document.getElementById("vertex2").onchange = function() {
     vertex2 = document.getElementById("vertex2").value;
     vertex2Position = graph.node.findIndex(e => e.name == vertex2)+ 1;
     document.getElementById("secondOutput").textContent = vertex2Position;
     path = getPath(vertex2Position); //How can I access path in var result
  };

  result = distance.vertex2Position;
  document.getElementById("searchResult").innerHTML = "test" + result + "" + path + ".";

}

Примечание: Вы используете функции, запускаемые событием "onchange", поэтому ваши переменные будут инициированы как неопределенные, кроме "vertex2Position"«

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...