通过$(文件).ready传递范围

时间:2016-04-28 23:52:36

标签: javascript jquery html

有人可以向我解释为什么这不起作用并向我展示如何使其发挥作用?我尝试过创建命名空间和IIFE函数,但我似乎无法得到它。

$(document).ready(function() {
  alert (hi);
});

$(document).ready(function() {
  var hi = "hello"
});

谢谢!

1 个答案:

答案 0 :(得分:4)

执行此操作时:

$(document).ready(function() {
  var hi = "hello"
});

您正在创建一个名为hi的变量,该变量是该回调函数的本地变量。在该功能之外根本无法访问它。这是该语言的一个特色。

您可以在更高的范围内声明变量,如下所示:

var hi;
$(document).ready(function() {
  hi = "hello"
});

然后,该变量的值将在范围之外可用,但您不一定知道它何时获得正确的值,因为您不知道何时调用$(document).ready()回调,除非您放置回调中的代码。

尝试在两次调用$(document).ready()之间共享变量真的没什么意义。将代码放在同一个$(document).ready()回调函数中

会更有意义
$(document).ready(function() {
  var hi = "hello"
  alert (hi);
});

不推荐

如果您打算尝试在两次调用$(document).ready()之间共享变量(我不建议这样做,因为它会使您的代码有些脆弱),可以完成。 $(document).ready()的回调将按照附加顺序进行调用,因此您必须妥善订购:

var hi;
$(document).ready(function() {
  hi = "hello"
});

$(document).ready(function() {
  alert (hi);
});

这将确保设置$(document).ready()值的第一个hi回调首先在您尝试使用该值的第二个回调之前调用。