富贵资源网 Design By www.hznty.com

我最近看到很多javascript代码,看起来我错了.在这种情况下,我应该建议哪种更好的代码模式?我将重现我所看到的代码和每个代码的简短说明:

代码块#1

该代码不应该评估内部函数.程序员会因为代码应该运行而感到困惑.

$(document).ready( function() { 
 return function() { 
  /* NOPs */
 }
});

代码块#2

程序员可能打算实现一个自调用功能.他们没有完全完成实现(他们在嵌套括号的末尾缺少一个().另外,由于它们在外部函数中没有做任何事情,所以嵌套的自调用函数可以刚刚嵌入到外部功能定义.

其实我不知道他们打算使用自调用函数,因为代码仍然是错误的.但似乎他们想要一个自我调用的功能.

$(document).ready( (function() { 
 return function() { 
  /* NOPs */
 }
}));

代码块#3

再次,程序员似乎试图使用自调用函数.但是,在这种情况下,它是过度的.

$(document).ready( function() { 
 (return function() { 
  /* NOPs */
 })()
});

代码块#4

一个示例代码块

$('#mySelector').click( function(event) { 
 alert( $(this).attr('id') );

 return function() { 
  // before you run it, what's the value here"htmlcode">
$(document).ready(function() {
 $('body').click((function(){
 return function()
 {
  if (counter == null) {
  var counter = 1;
  }
  if(counter == 3) {
   $(this).css("background-image","url(3.jpg)");
   $(this).css("background-position","10% 35%");
   var counter = null;
  }
  if(counter == 2) {
   $(this).css("background-image","url(2.jpg)");
   $(this).css("background-position","10% 35%");
   var counter = 3;
  }
  if(counter == 1) {
   $(this).css("background-image","url(1.jpg)");
   $(this).css("background-position","40% 35%");
   var counter = 2;
  }
 }
 })());
});

以下是我建议他们重写代码的方法:

var counter = 1;
$(document).ready(function() {
  $('body').click(function() {
    if (counter == null) {
      counter = 1;
    }
    if (counter == 3) {
      $(this).css("background-image", "url(3.jpg)");
      $(this).css("background-position", "10% 35%");
      counter = 1;
    }
    if (counter == 2) {
      $(this).css("background-image", "url(2.jpg)");
      $(this).css("background-position", "10% 35%");
      counter = 3;
    }
    if (counter == 1) {
      $(this).css("background-image", "url(1.jpg)");
      $(this).css("background-position", "40% 35%");
      counter = 2;
    }
  });
});

请注意,我并不是说我的代码在任何方面都更好.我只是删除匿名中介功能.我实际上知道为什么这个代码最初没有做他们想要的,而且我并没有重写大家的代码,但是我确实想要这个代码至少有可用的代码.

我认为一个真正的代码示例将不胜感激.如果你真的想要这个特定问题的链接,请给我这个昵称.他得到了几个非常好的答案,其中我的中档最好.

你的第一个例子是奇怪的.我甚至不知道这是否会以作者可能打算的方式工作.第二个简单地将第一个包装在不必要的括号中.第三个使用自调用函数,尽管由于匿名函数创建了自己的范围(可能还有一个闭包),我不知道它有什么好处(除非作者在闭包中指定了其他变量 – 读取).

自调用函数采用模式(函数f(){/ * do stuff * /}()),并且被立即评估,而不是调用它.所以这样的事情

var checkReady = (function () {
  var ready = false;
  return {
    loaded: function () { ready = true; },
    test: function () { return ready; }
  };
}())
$(document).ready(checkReady.loaded);

创建一个封装,将返回的对象作为checkready返回到变量ready(它从闭包之外的一切隐藏).这将允许您通过调用checkReady.test()来检查文档是否已加载(根据jQuery).这是一个非常强大的模式,并且具有很多合法用途(命名空间,记忆,元编程),但在您的示例中并不是必需的.

编辑:阿尔,我误解了你的问题.没有意识到你正在呼吁不好的做法,而不是要求澄清模式.更多关于您询问的最终形式的问题:

(function () { /* woohoo */ }())
(function () { /* woohoo */ })()
function () { /* woohoo */ }()

总结

以上所述是小编给大家介绍的javascript匿名函数中的'return function()'作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

富贵资源网 Design By www.hznty.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
富贵资源网 Design By www.hznty.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。