在 JavaScript 中自我声明匿名函数之前的美元符号?

IT技术 javascript jquery anonymous-function iife
2021-03-08 05:59:15

这两者有什么区别:

$(function () {
    // do stuff
});

(function () {
    // do stuff
})();
5个回答

第一个使用 jQuery 将函数绑定到document.ready事件。第二个声明并立即执行一个函数。

嗯,那么主要的区别是第二个不等待文档加载完成,而是立即执行?
2021-04-22 05:59:15
@xil3 - 正确。如果函数需要修改 DOM,第一个是合适的。如果您只需要 JS 的效果,则第二个很有用。两者很少可以互换,但通常前者更可取,因为大多数 jQuery 代码用于操作 DOM 元素。
2021-04-29 05:59:15

$(function() {}); 是一个 jQuery 快捷方式

 $(document).ready(function() { 
     /* Handler for .ready() called. */ 
 });

While(function() {})();是立即调用的函数表达式,或 IIFE。这意味着它是一个表达式(不是语句),并且在创建后立即调用。

我更喜欢将它们称为“立即调用”而不是“自执行”或“自调用”。例如,(function () { arguments.callee() })()将是一个“自执行/调用匿名函数”,而(function(){})()只是一个立即调用的匿名函数。见:benalman.com/news/2010/11/...
2021-04-23 05:59:15
*自执行匿名函数
2021-05-14 05:59:15

它们都是匿名函数,但(function(){})()会立即调用,并$(function(){})在文档准备好时调用。

jQuery 的工作方式是这样的。

window.jQuery = window.$ = function(arg) {
    if (typeof arg == 'function') {
        // call arg() when document is ready
    } else {
       // do other magics
    }
}

因此,您只需调用 jQuery 函数并传入一个函数,该函数将在文档就绪时调用。

“自执行匿名函数”与执行此操作相同。

function a(){
    // do stuff
}
a();

唯一的区别是您没有污染全局命名空间。

一个是 jquery$(document).ready函数,另一个只是一个调用自身的匿名函数。

这实际上不是一个闭包。只是一个自调用匿名函数。它们都不是闭包。请参阅:stackoverflow.com/questions/111102/...
2021-05-11 05:59:15
$(function () {
    // It will invoked after document is ready
});

一旦文档准备好,这个函数就执行意味着,整个 HTML 应该在执行之前加载,但在第二种情况下,函数在创建后立即调用。

(function () {
    // It will invoked instantly after it is created
})();