当前位置:  开发笔记 > 编程语言 > 正文

与JS"使用前定义"和Titanium Developer竞争

如何解决《与JS"使用前定义"和TitaniumDeveloper竞争》经验,为你挑选了1个好方法。

我有一个冗长的JavaScript文件传递JSLint,除了"在定义之前使用"错误.

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

function whatever() {do something;}

而不是......

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

与史蒂夫哈里森对早期帖子的回复一致......

假设您使用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.
}

如果函数需要按顺序声明,则function screen1需要先于function buildMenu.但是,如果在某些情况下,无法构建screen1并因此想重新显示菜单(即调用技术上尚未声明的函数),该怎么办?

哦,是的......还有一个问题:是否有网站或程序会自动重新排序函数,而不是要求程序员手动完成?



1> bcherry..:

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

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

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

   foo(); // wrong

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

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

这是因为解释器将首先读取函数声明,创建名称foo作为打印"right"的函数,然后读取var语句,并发现已经有一个名称,foo因此它将跳过创建一个带有该值的新变量undefined,如通常会发生.然后它逐行处理代码,其中包括赋值foo.函数声明不会被重新处理.也许这在Titanium中会有不同的表现,但是在Firebug中试试这个,你会得到我所得到的.

更好的解决方案是:

var screen1, buildMenu;

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

这也将传递JSLint,并产生正确的行为.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有