javascript匿名函数中的'return function()'作用


Posted in Javascript onOctober 15, 2018

我最近看到很多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?
  alert( $(this).attr('id') );
 }
});

评论:

我想我只是沮丧,因为它会导致人们不明白的蠕虫,更改范围界定,他们不是grokking,并通常使真正奇怪的代码.这些都是来自某些教程的地方吗?如果我们要教人们如何编写代码,我们可以教他们正确的方法吗?

你会建议什么作为一个准确的教程向他们解释为什么他们使用的代码是不正确的?你会建议他们学习什么模式?

我看到的所有使我提出这个问题的样本都是这样的问题.这是我遇到的最新的特征片段,展示了这种行为.你会注意到,我没有发布一个链接的问题,因为用户似乎是相当新手.

$(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()'作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
javascript表单事件处理方法详解
May 15 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
Feb 21 Javascript
详解微信小程序缓存--缓存时效性
May 02 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
JS实现点星星消除小游戏
Mar 24 Javascript
vue 实现动态路由的方法
Jul 06 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
Vue Cli3 创建项目的方法步骤
Oct 15 #Javascript
Vue-Router基础学习笔记(小结)
Oct 15 #Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 #Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 #Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
Oct 15 #Javascript
vue+axios+promise实际开发用法详解
Oct 15 #Javascript
javascript中关于类型判断的一些疑惑小结
Oct 14 #Javascript
You might like
发挥语言的威力--融合PHP与ASP
2006/10/09 PHP
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
基于PHP制作验证码
2016/10/12 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
软件工程师岗位职责
2013/11/16 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
创业计划书之寿司
2019/07/19 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技