今天看到一些js函数代码写法,就感到很好奇,查找了写资料,如下!
jQuery插件中的的js写法是这样的:
(function($) {
//...
})(jQuery);
layui组件是这样写的
;!function($){
//...
}();
还有的是这样的
!function(){
//...
}();
解释:
一般我们函数声明的方式有这两种:
function fnA(){
alert(1);
} //声明式函数
或者
var fnb = function(){
alert(1);
} //函数赋值表达式定义函数
注意:前面三种写法都是匿名函数,我们通常调用一个方法是以functionName()的方式调用,但是如果我们尝试为一个定义函数末尾加上(),解析器是无法理解的;
function fnc(){
alert(1);
}(); //解析器无法理解
或
function(){
alert(1);
}() //解析器无法理解
定义函数的调用方式应该是 fnc(); 那为什么将函数体部分用()包裹起来就可以了呢????
使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的做法,都可以使解析器正确的调用定义函数。!,+,-,(),~都有这样的功能。
通俗来讲:
(function(){})向脚本返回未命名的函数,随后一对空括号,表示立即执行这个返回的未知命名函数!空括号呢称为匿名函数的参数eg:
(function(msg){
alert(msg);
})("HelloWorld");