Javascript (область видимости переменной): переменная не получает назначенное ей значение - PullRequest
0 голосов
/ 09 сентября 2018

Я очень новичок в JS, и я пытаюсь установить значение переменной внутри функции, но после установки значения оно не определено. Мой код выглядит следующим образом:

    (function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();   
fp.get(function(result, components) { for (var index in components){...};
    var IP = 'nothing';                                                               
    $.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
      this.IP = JSON.stringify(data, null, 2);
      alert(this.IP);
    });

    alert(IP);
});

Я ожидаю, что переменная IP имеет одинаковое значение внутри и снаружи функции, но это не так. Внутреннее предупреждение показывает ожидаемое значение, но предупреждение вне функции показывает «ничего». Из похожих вопросов 1 , 2 , 3 , я не использую var, чтобы переопределить локальную переменную внутри функции, и я указываю на IP переменная вне функции с использованием 'this.', поэтому я не понимаю, почему она не работает должным образом?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Если вы хотите получить значение IP в любом месте, используйте следующий метод:

var IP = undefined;
var fpData = {};
function setIP(){
  var valueIP = undefined;
  $.ajax({
        url: "http://gd.geobytes.com/GetCityDetails?callback=?",
        async: false,
        dataType: 'json',
        success: function(data) {
            valueIP = JSON.stringify(data, null, 2); //console.log(valueIP);
            //return valueIP;
            localStorage.setItem('IP', valueIP);
        }
    });
  //return valueIP;
}

//call setIP
setIP();
IP = localStorage.getItem('IP');
console.log(IP);
0 голосов
/ 09 сентября 2018

Нет необходимости использовать this.IP, когда вы используете this внутри вызова API, вы ссылаетесь на саму функцию вызова API. Просто с помощью IP должно работать.

alert(IP); вне вызова API также не вернет результат. Этот вызов функции будет вызван немедленно даже до того, как API вернет некоторые данные, поэтому он выведет предыдущее значение undefined.

(function (name, context, definition){ 'use strict' ...} ('FP2', this, function (){...})
var fp = new FP2();   
fp.get(function(result, components) { for (var index in components){...};
    var IP = undefined;                                                               
    $.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
     IP = JSON.stringify(data, null, 2);
     alert(IP);
    });

    alert(IP); //This will return undefined
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...