如何访问
中的一些变量$(document).ready(function(){
var foo=0;
var bar = 3;
});
来自谷歌Chrome控制台?如果我尝试alert(foo),我会收到一条消息,说明它没有定义。
答案 0 :(得分:46)
在调试器中放置一个断点。当调试器停止时,您将获得对它们的完全访问权限。
其他答案告诉你把它们放在全球范围内是不好的。不要仅仅因为你不知道如何使用正确的工具而使用不良做法。
答案 1 :(得分:16)
您无法访问这些变量,因为它们是在功能闭包中定义的。唯一可行的方法是在函数范围之外对它们进行全局引用。
var foo, bar;
$(document).ready(function(){
foo = 0;
bar = 3;
});
答案 2 :(得分:13)
为什么不做一个正确的公开变量?
$(document).ready(function(){
var foo=0;
var bar = 3;
$.exposed = {
foo: foo,
bar: bar
}
});
执行
检查变量console.log($.exposed.bar)
答案 3 :(得分:5)
你不能因为它们处于封闭空间。 Here它解释了闭包的工作原理(How do JavaScript closures work?)。
要访问变量,只需在$(document).ready
函数
答案 4 :(得分:3)
如果真的需要从代码的不同部分访问这些变量(例如,在文档就绪时初始化它们,然后在其他地方访问它们),那么你必须在函数闭包之外声明它们
当且仅当情况确实如此时,我并不喜欢混乱全球空间。我建议你使用一个基础对象:
var myObj = {};
$(function() {
myObj.foo = 0;
myObj.bar = 3;
});
注意只有在加载文档后才能设置它们!因此,在alert(myObj.foo);
区块生成$(function() { ... });
后会立即undefined
(或类似内容)!
如果您只需要在该上下文中访问它们,那么不在函数外部声明任何内容。并尝试使用其他方法调试您的代码。例如,对于chrome,console.log
非常有帮助。
答案 5 :(得分:0)
$(document).ready(function(){
window.foo=0;
window.bar = 3;
});
您将这些变量暴露在全球范围内(真的不建议)
答案 6 :(得分:0)
在$(document).ready()之外定义它们,然后在内部访问它们。
var foo = 0, bar = 3;
$(document).ready(function(){
alert(foo);
});
答案 7 :(得分:0)
实际上有一种骇人听闻的方式。你可能不应该使用它。设置断点。话虽这么说,这是代码:
$(document).ready(
readyClosure = function(access){
var x = 5;
return eval(access);
}
);
readyClosure('x'); // returns 5