我在jQuery中有这个代码..
$(document).ready(function(){
var fieldCounter = 0; ...
我有一个增加这个值的jQuery函数。
这有效,但我无法从非jQuery函数访问页面上的这个值?反之亦然,如果我将其用于JavaScript,例如
<script type="text/javascript">
var fieldCounter = 0;
我可以从javascript访问它但是jQuery无法查看它吗?
我可能正在做一些非常愚蠢的事情?
答案 0 :(得分:8)
它与jQuery无关,但都与Javascript范围无关。
$(document).ready(function() {
var fieldCounter = 0;
});
fieldCounter
在function
内声明。由于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>