视为有害的声明
2006年4月11日上午7:52时由Douglas Crockford |在发展中| 64评论 JavaScript的with语句的目的是提供一个经常访问的对象编写的简写。 因此,而不是写
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = TRUE; ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = TRUE;
你可以写
(ooo.eee.oo.ah_ah.ting.tang.walla.walla) 冰= TRUE; 轰隆= TRUE; }
这看起来要好很多。 除了一件事。 有没有办法,你可以告诉在哪个代码bing bang Bang将得到更新日期。 会ooo.eee.oo.ah_ah.ting.tang.walla.walla修改? 全局变量或将bing bang Bang打一顿? 肯定知道这是不可能的的。
with语句将对象的成员,目前的范围。 仅当有bing Bing在ooo.eee.oo.ah_ah.ting.tang.walla.walla ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing访问。
如果你不能读程序,并有信心,你知道它是什么做,你可以没有信心,这是正常工作。 出于这个原因,应避免with语句。
幸运的是,JavaScript也提供了一个更好的选择。 我们可以简单地定义一个var 。
VAR O = ooo.eee.oo.ah_ah.ting.tang.walla.walla; o.bing = TRUE; o.bang = TRUE;
现在有没有歧义。 我们可以有信心,这是ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang正在建立,而不是一些倒霉的变量。
分享和扩展: 书签del.icio.us | Digg它! | 书签交易!
同步诉异步
2006年4月4日,11:55上午由Douglas Crockford |在发展中| 26评论XMLHttpRequest的可以同步或异步操作。 许多人喜欢用它同步。 采用这种方式时,JavaScript引擎被阻塞,直到完成与服务器的交互。 因为它阻止,控制流很多看起来像一个普通的函数调用。 时间复杂度是抽象化了,留下一个非常熟悉和舒适的的编程模式。 特别是当服务器是同一台机器上,或附近的局域网上。 不幸的是,它可以执行非常严重,如果服务器在重负荷下,如果浏览器是连接到服务器通过慢速链接。 由于JavaScript引擎被阻塞,直到请求完成,浏览器将被冻结。 用户无法取消该请求,无法点击了,不能去另一个标签。 这是极其恶劣的行为。
幸运的是,XMLHttpRequest提供了一个异步操作的选项。 asyncFlag标志设置true true ,当你的JavaScript引擎不会阻止。 相反,请求立即返回,并与潜在的行动将触发后,当请求的结果是已知的。 在雅虎 连接管理器为此提供了一个非常漂亮的界面。
cObj = YAHOO.util.Connect.asyncRequest(“GET”,“http://myservice.com?req=update',{ 成功:函数(响应){ 警报(response.responseText); }, 失败:函数(响应){ 警报(response.statusText); } });
您提供两种功能。 你success成功函数包含作为一个成功的请求的结果应该发生的一切。 因此,如果请求获得一些JSON文本应交付的app.update方法,那么你success的功能可以
成功:函数(响应){ app.update(EVAL(“(”+ response.statusText + ')')); }
异步编程是稍微复杂些,因为请求的后果,而不是下面的请求语句的功能封装。 但实时的行为,用户体验可以显着改善,因为他们不会看到不景气的服务器或网络不畅导致浏览器的行为,虽然它已坠毁。 同步编程是不敬的,不应该在受雇于这是人们所使用的应用程序。
分享和扩展: 书签del.icio.us | Digg它! | 书签交易!

