为什么JavaScript变量"未定义"如果它是从JSON.search()返回的?

时间:2015-03-03 16:52:50

标签: javascript jquery json

我有以下代码

function f () {
  var jsonvar = get (...);
  console.log (jsonvar);
  $.ajax({
      type: "POST",
      url: transactUrl,
      dataType: "xml",
      success: function (result) {
        console.log (jsonvar);
      }
  });
}

function get (param) {
    return JSON.search (...).toString ();
}

我将得到结果:

"someValue"
undefined

但为什么jsonvar$.ajax()函数内被“遗忘”?未使用JSON定义的变量将具有相同的值。他们之间有什么区别? Javascript的typeof会为这两个人返回String

2 个答案:

答案 0 :(得分:2)

我认为你的代码中某处有一些错误(可能)会导致"无声错误"。看到这个小提琴; http://jsfiddle.net/9k1f6dpb/

function f () {
    var jsonvar = get();
    console.log (jsonvar);

    $.ajax({
        type: "GET",
        url: 'http://updates.html5rocks.com',
        success: function (result) {
            console.log(jsonvar);
        }
    });
}

function get (param) {
    return JSON.search({'a': 1}, '//a').toString();
}

f();

这表明设置正常,变量不会被遗忘"一路上。尝试添加'使用strict' ...它可能有助于在调试时抛出有用的错误。

function f () {
    'use strict';
    ...

答案 1 :(得分:0)

我发现了问题:

ii = "someString";
function f () {
    console.log(ii);
    var ii = 5;
    console.log(ii);
}
f();

给出输出:

undefined
5

因此在函数内部定义了相同的变量。但这对我来说是新的,我认为变量将在第一次定义时存在。