在函数外部调用var函数

时间:2017-02-01 08:10:44

标签: javascript

我正在尝试在函数外部调用此变量,但结果是未定义的。我理解没有var,变量可以在全局范围内调用,但我得到了未定义。我也尝试在函数外部设置var并调用它,但也没有成功。这是我的简化代码,谢谢:)

function function1() {
  $.getJSON('random.json')
    .success(successfunction)
    .error(failfunction);

  function successfunction(data) {
    testvar = (data.name);
  }
  function failfunction(error) {
    console.log(error);
  }
};

console.log(testvar);

使用 $( document ).ajaxStop(function() {} 在ajax加载后加载var。

3 个答案:

答案 0 :(得分:2)

它只在方法范围内可见,你必须在函数之外声明它(在这种情况下意味着全局)或者在函数调用中返回它:

var testvar2 = "var 2";

function function1() {
  // parse json
  return successfunction("data");

  function successfunction(data) {
    testvar2 = "var glob";
    var testvar = "var ret";
    return testvar;
  }
  function failfunction(error) {
    console.log(error);
  }
};

console.log(testvar2);
console.log(function1());
console.log(testvar2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

应该避免声明全局变量并且不是好的做法,尝试尽可能小地定义变量的范围。如果任何其他js模块也声明了一个名为testvar2的变量,那么可能会发生一些有趣的事情。

答案 1 :(得分:1)

尝试在成功函数中添加返回testvar而不是调用testvar

调用成功函数

  function successfunction(data){
    testvar = "var";
    return testvar;
}

答案 2 :(得分:1)

如果您希望全局范围将您的变量附加到全局对象,如window

function successfunction(data){
    window.testvar = "var";
} 

通过这种方式,你将确保它变得全球化。

但是,您应该注意successfunction是一个稍后将运行的回调:它在超时后运行&amp;只有ajax调用成功。