function doSomethingWith(param) { document.body.addEventListener( 'scroll', function() { document.write(param); }, false ); // An event that I want to remove later } setTimeout( function() { document.body.removeEventListener('scroll', HANDLER ,false); // What HANDLER should I specify to remove the anonymous handler above? }, 3000 ); doSomethingWith('Test. ');
可能重复: 自动执行匿名JavaScript函数的括号的位置? 有时我看到: (function() { … }()); 有时我会看到: (function() { … })(); 我看到两种forms有和没有论据。 他们都 执行匿名函数。 这两种forms有什么区别? 是否有任何令人信服的理由使用其中一种forms?
我知道这很愚蠢,但是这有什么区别: (function() { var foo = 'bar'; })(); 和这个? (function() { var foo = 'bar'; }()); JSLint告诉我们Move the invocation into the parens that contain the function ,但是我不需要。 编辑:答案太酷了。 ~function , JSHint替代scheme以及jQuery对(/***/)();的偏好(/***/)(); 和克罗克福德的解释! 我以为我会得到一个“他们是同样的东西”的答案。 你们通过upvotes决定最好的一个,我打勾。
部分网站的JSON响应有(…添加上下文): {…, now:function(){return(new Date).getTime()}, …} 是添加匿名函数到JSON有效吗? 我希望你每次访问“时间”返回一个不同的值。
考虑下面的代码片段: # directorys == {'login': <object at …>, 'home': <object at …>} for d in directorys: self.command["cd " + d] = (lambda : self.root.change_directory(d)) 我期望创build一个两个函数的字典如下: # Expected : self.command == { "cd login": lambda: self.root.change_directory("login"), "cd home": lambda: self.root.change_directory("home") } 但它看起来像生成的两个lambda函数是完全一样的: # Result : self.command == { "cd login": lambda: self.root.change_directory("login"), "cd home": lambda: self.root.change_directory("login") […]
我们有两种不同的方式来在JavaScript中进行函数expression: 命名函数expression式(NFE) : var boo = function boo () { alert(1); }; 匿名函数expression式 : var boo = function () { alert(1); }; 这两个都可以用boo();来调用boo(); 。 我真的不明白为什么/当我应该使用匿名函数,当我应该使用命名函数expression式。 他们之间有什么不同?
我正在阅读关于closures的一些post,并在任何地方看到这个post,但没有明确的解释它是如何工作的 – 每次我只是被告知使用它…: // Create a new anonymous function, to use as a wrapper (function(){ // The variable that would, normally, be global var msg = "Thanks for visiting!"; // Binding a new function to a global object window.onunload = function(){ // Which uses the 'hidden' variable alert( msg ); }; // Close off the […]
概要 你能解释JavaScript的封装匿名函数的语法背后的原因吗? 为什么这个工作: (function(){})(); 但是这不: function(){}(); ? 我知道的 在JavaScript中,创build一个像这样的命名函数: function twoPlusTwo(){ alert(2 + 2); } twoPlusTwo(); 您也可以创build一个匿名函数并将其分配给一个variables: var twoPlusTwo = function(){ alert(2 + 2); }; twoPlusTwo(); 您可以通过创build一个匿名函数来封装一段代码,然后将其封装在括号中并立即执行: (function(){ alert(2 + 2); })(); 这在创build模块化脚本时非常有用,以避免混淆当前范围或全局范围,并且可能存在冲突的variables – 例如Greasemonkey脚本,jQuery插件等。 现在,我明白为什么这个工作。 括号内包含的内容,只公开结果(我敢肯定有一个更好的方式来描述),如(2 + 2) === 4 。 我不明白 但是我不明白为什么这不起作用: function(){ alert(2 + 2); }(); 你能解释一下吗?