javascript中的函数表现不一致

时间:2015-03-31 17:13:40

标签: javascript function

以下代码用于从单词列表构建对象。

var buildDictionary = function() {
  console.log("Buildling Dictionary");
  console.log(masterList);
  var word, vowelString, dict = {};
  for (var i = 0; i < masterList.length; i++) {
    word = masterList[i][0];
    vowelString = getVowels(masterList[i]);
    console.log(vowelString);
    if (dict[vowelString] == undefined)
      dict[vowelString] = [word];
    else
      dict[vowelString].push(word);
  }
  return dict;
}
var dictionary = buildDictionary();

当按原样运行时,字典是一个空对象。但是,如果我手动调用它......

dictionary = buildDictionary();

按预期工作!

完整代码(如果相关)可在此处https://jsfiddle.net/4yts4uvr/

获取

1 个答案:

答案 0 :(得分:1)

在你的jsfiddle中,使用ajax加载masterList,你需要在回调中构建你的字典。

$.ajax({
  type: "GET",
  url: "../data/cmudict-0.7b"
}).success(function(content) {
    // do stuff with content
}).then(function() {
  // make your second ajax call (or look at jQuery.when)
  $.ajax({
      type: "GET",
      url: "../data/cmudict-0.7b.phones"
  }).success(function(content) {
      // do stuff with content
  }).then(function() {
      var dictionary = buildDictionary();
  });
});

通过这种方式,您可以确保在运行buildDictionary函数之前获得所需的所有数据。

您可以执行同步http请求(阻止),但在主线程上执行时不推荐使用它们:

  

注意:从Gecko 30.0(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27)开始,由于对用户体验的负面影响,主线程上的同步请求已被弃用。