javascript - 通过 $(document).ready 传递范围

标签 javascript jquery html

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

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

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

谢谢!

最佳答案

当你这样做时:

$(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);
});

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

关于javascript - 通过 $(document).ready 传递范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36927321/

相关文章:

javascript - 在隐藏的 div 中滑动

javascript - 使用 <img> onclick 触发 js 函数

javascript - D3 arc tweening 不工作

javascript - 两页,一个 jQuery 脚本,一个站点出现错误

html - 如何使 html 下拉列表在 ios web 应用程序中始终显示为滚动菜单?

javascript - 使用 sessionstorage 保存暗模式

使用 reduce 将 Javascript 对象转换为查询字符串

javascript - 按后缀插入多个 TD 到表中间

javascript - 为什么在 Jquery 中添加 "blocker"类后我的事件绑定(bind)不再触发?

html - 在 HTML 中构建复杂表单的正确方法