admin管理员组文章数量:1432384
I'm struggling with (what I believe to be) a scoping issue. Here's a sample of my code:
$(document).ready(function() {
var counter = 0;
function scrollTweets() {
counter ++;
// rest of code
}
...
)}; // end of document ready
When I look up the variable counter
in Chrome's Javascript console it returns "ReferencedError". However, when I remove var
from the code above and type counter
into the console, it returns the value. Why is this?
I think understanding this simple concept would allow me to tackle issues that seem to pop up during development. Is it just a scoping issue on Chrome's part? Am I needlessly wrapping everything in the $(document).ready
"function"?
I'm struggling with (what I believe to be) a scoping issue. Here's a sample of my code:
$(document).ready(function() {
var counter = 0;
function scrollTweets() {
counter ++;
// rest of code
}
...
)}; // end of document ready
When I look up the variable counter
in Chrome's Javascript console it returns "ReferencedError". However, when I remove var
from the code above and type counter
into the console, it returns the value. Why is this?
I think understanding this simple concept would allow me to tackle issues that seem to pop up during development. Is it just a scoping issue on Chrome's part? Am I needlessly wrapping everything in the $(document).ready
"function"?
-
2
Don't make it global! If you want to inspect
counter
, then set a breakpoint in the code. This will allow you to examine the current state of the variables in the various levels of closure. Or just log the value usingconsole.log()
. – user113716 Commented Oct 21, 2011 at 16:38 - thanks @Ӫ_._Ӫ ...that's a good technique! – pruett Commented Oct 21, 2011 at 18:35
2 Answers
Reset to default 7The var
locks the variable counter
into whatever the lexical scope is -- which means its available in the current block, method, whatever, and can be attached to closed-in scopes (ie. closures), like you are doing with scrollTweets
. So counter
is only available in the ready
callback and anything that has a closure around it, which is why you can't access it from your console.
When you take the var
away, counter
is effectively global, which is why you can access it in that case.
When you don't use var
to set the scope of the variable, it automatically bees a global variable, inside the global scope. That's why it is visible in the Chrome console.
As a note, I'm by no means implying you should make the variable global. In fact that's almost always a bad idea! Capturing the variable in the context of the scope where it's used is the right thing to do. If the Chrome console can't handle that you just need a better debugger. Firebug for Javascript does a wonderful job at handling scope - even clojures!
本文标签: jqueryUsing var to declare variables in JavascriptStack Overflow
版权声明:本文标题:jquery - Using var to declare variables in Javascript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745591583a2665231.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论