Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
303 views
in Technique[技术] by (71.8m points)

javascript - JSLint error: Move all 'var' declarations to the top of the function

JSLint site updated, and I cannot check JS scripts anymore. For me, this warning is not critical, and I don't want to go through thousands of lines to fix this, I want to find more critical problems.

Does anybody know how to turn off this error, or use legacy JSLint?

UPDATE

Example:

function doSomethingWithNodes(nodes){
  this.doSomething();

  for (var i = 0; i < nodes.length; ++i){
    this.doSomethingElse(nodes[i]);
  }

  doSomething(); // want to find this problem
}

jslint.com output:

Error:
Problem at line 4 character 8: Move all 'var' declarations to the top of the function.

for (var i = 0; i < nodes.length; ++i){

Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).

Problem:

Having variables on top of the functions is new requirement. I cannot use JSLINT to test code, because it stops scanning script on this error.

I have a lot of code, and do not want to threat this warning as critical error.

UPDATE 8/22/2011: found http://jshint.com, it looks much better than http://jslint.com/

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Update June, 2017: Subject to support (e.g. if you're not running JavaScript in Internet Explorer 10 or below), you should look into using let instead of var.

For example: for(let i=0; ...; i++)


There's no way I'm going to put var i; from a for(var i=0; ...; i++) at the top of my functions. Especially when The JavaScript Specification has it as an acceptable syntax in the for section (12.6). Also, it's the syntax Brendan Eich uses in his examples.

The idea of moving the declaration to the top is that it is supposed to more accurately reflect what happens under the hood, however, doing so will only reflect, not affect.

For me, this is a ridiculous expectation for for iterations. More so because JSLint stops processing when it detects it.

Whether having variables declared at the top of a function is more readable is debatable. I personally prefer iterator variables to be declared when they are used. I don't care if the variable is already created internally, I'm initialising it here so I am safe.

I would argue that declaring an iterator variable where they are used ensures they are not accidentally made global (if you move the loop out into another function, the iterator variable moves with it). This is much more maintainable than having to maintain variable declarations at the top of functions.

For now, I'm using http://www.javascriptlint.com/online_lint.php because it seems to focus on the important stuff.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...