![](/img/trans.png)
[英]declaring local variables inside document ready or inside function in different scope
[英]Console access to Javascript variables local to the $(document).ready function
我怎樣才能訪問里面的一些變量
$(document).ready(function(){
var foo=0;
var bar = 3;
});
來自谷歌Chrome控制台? 如果我嘗試alert(foo),我會收到一條消息,說明它沒有定義。
在調試器中放置一個斷點。 當調試器停止時,您將獲得對它們的完全訪問權限。
告訴你把它們放在全球范圍內的其他答案都很糟糕。 不要僅因為您不知道如何使用正確的工具而使用不良做法。
您無法訪問這些變量,因為它們是在功能閉包中定義的。 唯一可行的方法是在函數范圍之外對它們進行全局引用。
var foo, bar;
$(document).ready(function(){
foo = 0;
bar = 3;
});
為什么不做一個合適的暴露變量?
$(document).ready(function(){
var foo=0;
var bar = 3;
$.exposed = {
foo: foo,
bar: bar
}
});
通過執行檢查變量
console.log($.exposed.bar)
你不能因為它們處於封閉空間。 這里解釋了閉包是如何工作的( JavaScript閉包如何工作? )。 要訪問varible,只需在$(document).ready
函數內設置一個斷點
如果您確實需要從代碼的不同部分訪問這些變量(例如,在文檔就緒時初始化它們,然后在其他地方訪問它們),那么您必須在函數閉包之外聲明它們。
只有在這種情況下,我才不會惹惱全球空間。 我建議你使用一個基礎對象:
var myObj = {};
$(function() {
myObj.foo = 0;
myObj.bar = 3;
});
請注意 ,只有在加載文檔后才能設置它們! 因此alert(myObj.foo);
(或類似的東西)緊跟在$(function() { ... });
塊將產生undefined
!
如果你只需要訪問他們上下文中,那么不申報的功能以外的任何東西。 並嘗試使用其他方法調試您的代碼。 例如,使用chrome, console.log
非常有用。
$(document).ready(function(){
window.foo=0;
window.bar = 3;
});
您將這些變量暴露在全局范圍內(真的不建議)
在$(document).ready()之外定義它們,然后在內部訪問它們。
var foo = 0, bar = 3;
$(document).ready(function(){
alert(foo);
});
實際上,圍繞它有一種hackish方式。 你可能不應該使用它。 設置斷點。 話雖這么說,這是代碼:
$(document).ready(
readyClosure = function(access){
var x = 5;
return eval(access);
}
);
readyClosure('x'); // returns 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.