我有一个冗长的JavaScript文件传递JSLint,除了"在定义之前使用"错误.
我使用了正常的函数声明,如...
function whatever() {do something;}
Run Code Online (Sandbox Code Playgroud)
而不是......
var whatever = function(){do something;};
Run Code Online (Sandbox Code Playgroud)
假设您使用function关键字声明所有函数,我认为它成为一个编程风格的问题.就个人而言,我更喜欢以一种看似合乎逻辑的方式构造我的函数,并使代码尽可能可读.例如,和你一样,我会在顶部放置一个init函数,因为它是从一切开始的地方.
...我喜欢按照对我有意义的顺序查看功能.
该脚本在几个测试的浏览器中完美运行(例如,FireFox,Safari,Mobile Safari,Fennec,IE,Chrome,Midori等).
这就是问题所在:我想在使用Titanium构建的iPhone应用程序中使用该脚本,但其编译器会因"使用前定义"错误而停止.
我怎么能绕过这个?
这可能是一个愚蠢的问题,但也......如果函数需要以特定的顺序调用,如何解决需要回调最初调用它的函数的被调用函数的问题?例如...
function buildMenu(){
Display a list of five menu items, each of which calls a function to build the associated screen.
}
function screen1() {
Display the screen associated with menu item #1.
}
Run Code Online (Sandbox Code Playgroud)
如果函数需要按顺序声明,则function screen1需要先于function buildMenu.但是,如果在某些情况下,无法构建screen1并因此想重新显示菜单(即调用技术上尚未声明的函数),该怎么办?
哦,是的......还有一个问题:是否有网站或程序会自动重新排序函数,而不是要求程序员手动完成?
搜索JSLint错误"在定义之前使用过"我发现了这些:
这些答案都不是为什么显示错误.
根据ECMA-262规范函数在执行开始之前进行评估,因此使用该function关键字声明的所有函数都可用于与它们被声明的位置相关的所有代码(假设它们在该范围内是可访问的).
这也称为吊装.
Douglas Crockford似乎认为最好在使用它的代码之前声明每个函数,而不管提升效果如何.
根据StackOverflowNewbie在他的问题中,这引发了一些代码组织问题.更不用说像我这样的人喜欢在main/init代码下声明他们的功能.
在这些问题上,有一些方法可以避免或修复错误,例如使用函数表达式和函数声明.但他们都没有告诉我错误的原因.甚至不是Crockford的网站.
为什么在声明之前调用函数是错误的,即使它是使用function关键字声明的?
在JSLint上下文中使用函数表达式而不是函数声明是否更好?如果首选,为什么?
不寻找像这样的答案:
谢谢 :*