【ECMAScript】立即执行函数

函数声明: function foo() {},函数声明会被引擎提升
匿名函数:function () {};
函数表达式:var fun = function () {};

要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明

foo();// 因为函数声明提升,不会报错
function foo() {
    console.log("foo");
}
fun();// fun没有赋值,会报错
var fun = function () {
    console.log("fun");
}

立即执行函数

标准写法

(function foo() {
    console.log("方式1");
}());
(function foo() {
    console.log("方式2");
})();

运算符写法。!、+、-、~都将函数声明转换成函数表达式,消除了javascript引擎识别函数表达式和函数声明的歧义,告诉javascript引擎这是一个函数表达式,不是函数声明。

!function foo() {
    console.log("方式3");
}();
+function foo() {
    console.log("方式4");
}();
-function foo() {
    console.log("方式5");
}();
~function foo() {
    console.log("方式6");
}();

追加防御型分号

;(function foo() {
    console.log("方式1");
}());

JQuery相关

(function($){
    console.log("...");
})(jQuery);

将实参jQuery传入函数function($){},通过形参$接收。

$(function(){...});是$(document).ready(function(){...})的简写形式,是在DOM加载完成后执行的回调函数,并且只会执行一次。

下面两个效果完全一样

$(function() {
   console.log("...");
});
$( document ).ready(function() {
   console.log("...");
});
原文地址:https://www.cnblogs.com/yangchongxing/p/15438970.html