javascript匿名函数中的'return function()'作用
我最近看到很多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()'作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
下一篇:Vue Cli3 创建项目的方法步骤