微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,并产生正确的行为.

原文地址:https://www.jb51.cc/js/154468.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐