簡體   English   中英

控制台訪問$(document).ready函數本地的Javascript變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM