我有一个冗长的JavaScript文件,该文件通过JSlint,除了“在定义之前使用”错误。

我使用了正常的函数声明,如...

function whatever() {do something;}

而不是...

var whatever = function(){do something;};

并与之一致 史蒂夫·哈里森(Steve Harrison)的答复 到较早的帖子...

假设您使用函数关键字声明所有功能,我认为它会成为编程式的问题。就个人而言,我更喜欢以看起来合乎逻辑的方式构造我的功能,并使代码尽可能可读。例如,像您一样,我将一个初始化功能放在顶部,因为这是一切开始的地方。

...我喜欢以对我有意义的顺序看到功能。

该脚本在经过测试的几个浏览器(例如Firefox,Safari,Mobile Safari,Fennec,IE,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.
}

如果需要按顺序声明功能, function screen1 需要先于 function buildMenu. 。但是,如果在某些条件下无法构建Screen1并且想要重新播放菜单(即调用尚未声明的函数),该怎么办?

哦,是的...还有一个问题:是否有网站或程序自动重新序列功能而不是要求程序员手动执行功能?

有帮助吗?

解决方案

不,EM的答案不是正确的解决方案。尝试运行此JavaScript:

(function () {
   foo(); // right

   var foo = function () {
     console.log("wrong");
   };

   foo(); // wrong

   function foo() {
     console.log("right");
   }

   foo(); // wrong
}());

这是因为解释器将首先读取函数声明,创建名称 foo 作为打印“正确”的函数,然后读取 var 声明,发现已经有一个名称 foo 因此,它将跳过创建一个具有值的新变量 undefined, ,正如通常发生的那样。然后它处理代码,按线,其中包括分配 foo. 。该功能声明不会被重新处理。也许这在钛中的表现会有所不同,但是在Firebug中尝试一下,您会得到我得到的。

一个更好的解决方案是:

var screen1, buildMenu;

screen1 = function () { buildMenu(); };
buildMenu = function () { screen1(); };

这也将通过JSlint,并产生正确的行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top