jQuery和JavaScript有不同的命名空间吗?

时间:2010-04-08 04:03:13

标签: javascript jquery

我在jQuery中有这个代码..

$(document).ready(function(){ 

var fieldCounter = 0;  ...

我有一个增加这个值的jQuery函数。

这有效,但我无法从非jQuery函数访问页面上的这个值?反之亦然,如果我将其用于JavaScript,例如

<script type="text/javascript">

var fieldCounter = 0;

我可以从javascript访问它但是jQuery无法查看它吗?

我可能正在做一些非常愚蠢的事情?

6 个答案:

答案 0 :(得分:8)

它与jQuery无关,但都与Javascript范围无关。

$(document).ready(function() { 
   var fieldCounter = 0;
});

fieldCounterfunction内声明。由于Javascript具有函数作用域,因此该函数在函数外部不可见。

BTW,jQuery Javascript,它们遵循相同的规则,它们不是两种不同的技术。

详尽的答案可以在这里找到:What is the scope of variables in JavaScript?

答案 1 :(得分:2)

jQuery并不神奇。它是一个JavaScript库。您的问题是您在函数内定义局部变量。由于JavaScript词法作用域的工作方式,你不能在该函数之外访问它(闭包除外,这里不适用)。

最有可能的是,你只想:

$(document).ready(function(){ 

fieldCounter = 0;

这将使它成为一个全局变量。

编辑:请注意,使用命名空间和/或声明全局变量更清晰,但不是必需的。

答案 2 :(得分:1)

第一种情况下你的问题是范围。通过将var init放在函数声明中,您可以使用它来访问该函数内部。

第二种情况还有其他事情发生;看看会有什么代码。

Javascript中的全局范围是window。这意味着,当您直接在<script>代码中声明变量时,可以通过询问window.variableName来取回变量。

解决这些范围问题的常用方法是创建命名空间框架。如果你做得对,你可以致电myNamespace.subNamespace.variable,并且完全有信心,因为它明确地限定为window,无论你身在何处,你都可以取回它。

请记住,jQuery是用Javascript构建的。没什么特别的。

答案 3 :(得分:0)

JavaScript具有功能范围。

var count = 8;

var myfunction = function() {

   var newCount = count + 1;

};

alert(newCount); // undefined

答案 4 :(得分:0)

这是因为javascript的范围...尝试阅读this

答案 5 :(得分:0)

在jQuery代码块中声明的变量将具有本地范围。如果您需要在本地javascript函数以及jQuery代码块中访问变量,则在全局级别声明变量。示例代码段: -

 <script type="text/javascript" language="javascript">
        var increment = 0;
        $(document).ready(function() {
            $("#button2").click(function() {
                increment = increment + 1;
                alert(increment);
            });
        });
        function ClickMe() {
            increment = increment + 1;
            alert(increment);
        }
    </script>