JavaScript – 与JS“使用之前定义”和Titanium Developer相冲突

前端之家收集整理的这篇文章主要介绍了JavaScript – 与JS“使用之前定义”和Titanium Developer相冲突前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个冗长的 JavaScript文件,传递JSLint,除了“被定义之前使用”错误.

我使用正常的函数声明,如在…

function whatever() {do something;}

相对于…

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

并与Steve Harrison’s reply一致以前的帖子…

Assuming you declare all your
functions with the function keyword,I
think it becomes a programming-style
question. Personally,I prefer to
structure my functions in a way that
seems logical and makes the code as
readable as possible. For example,
like you,I’d put an init function at
the top,because it’s where everything
starts from.

…我喜欢看到功能按照我的意思.

脚本在测试的几个浏览器(例如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.
}

如果函数需要按顺序声明,则函数screen1将需要在函数buildMenu之前.但是,如果在某些情况下,screen1无法构建,因此要重新显示菜单(即调用技术上尚未声明的功能)?

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

解决方法

不,EM的答案不是正确的解决方案.尝试运行此JavaScript:
(function () {
   foo(); // right

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

   foo(); // wrong

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

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

这是因为解释器将首先读取函数声明,将名称foo创建为打印“right”的函数,然后读取var语句,并发现已经有一个名称foo,因此它将跳过创建一个新变量值未定义,正常情况下.然后,它逐行处理代码,其中包含一个赋值给foo的代码.函数声明不会被重新处理.也许这在Titanium中的行为会有所不同,但是在Firebug中尝试这样做,你会得到我所得到的.

一个更好的解决方案是:

var screen1,buildMenu;

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

这也将通过JSLint,并产生正确的行为.

猜你在找的JavaScript相关文章