函数声明: 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("..."); });