一个功能产生两种不同的结果?回调地狱

时间:2018-08-08 19:41:08

标签: javascript jquery callback

TABS.cutoffs = {};
TABS.cutoffs.initialize = function(callback) {
  var self = this;

  $("select[name=selectlanguage]").on("change", function() {
    localStorage.setItem("languageValue", $(this).val());
    console.log(localStorage.getItem('languageValue'), "inside$JqueryFunction");
  });

  console.log(localStorage.getItem('languageValue'), "outsidetheFunction");

  if (callback) callback();

};

在HTML中:

<td>
  <select class="dropdown" id="selectlanguage" name="selectlanguage">
    <option id="enBtn" value="en">English</option>
    <option id="zhBtn" value="zh">简体中文</option>
  </select>
</td>

在控制台中它说:

en outsidetheFunction
zh inside$JqueryFunction

看到了吗?它应该相同,例如:

en outsidetheFunction
en inside$JqueryFunction

zh outsidetheFunction
zh inside$JqueryFunction

为什么localStorage.getItem('languageValue')在函数$("select[name=selectlanguage]").on("change", function()的内部和外部变得不同?

1 个答案:

答案 0 :(得分:0)

这里没有回调地狱。

调用initialize函数时,会发生以下情况:

  • 设置了更改事件处理程序(但未调用)
  • 在控制台中读取并打印localStorage

另一些​​时间-我想以后-如果您更改选择中的所选选项,则新选择的值将被写入本地存储中。

因此,您遇到的情况非常正常:

首先,在控制台中打印"en outsidetheFunction"。最有可能是因为“ en”是用localStorage编写的。我想从以前的处决。

然后,"zh inside$JqueryFunction"将打印在控制台中。 很有可能是因为您在选择中选择了“ zh”并触发了change事件,该事件写入localStorage并打印新值。