JS中各种奇葩的匿名函数写法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bu_dan/article/details/50154617

乱就一个字 完全增加新手的学习门槛 各种自定义写法 乱七八糟 

1. 定义命名函数

function functionName(parameter-list)

{

statement;

}

1)这里的函数名称functionName不能省略 

2) 可以有返回值,也可以没有,用return来返回

3)在同一个<script/...>标签里,运行先调用函数,然后再定义函数, 但是在不同的<script/...>标签里。必须先定义函数,然后后面的标签里可以调用该函数

所以后面的script可以调用前面的定义的函数,

所以有覆盖的问题 有命名重复的问题 文邹一点就是可能污染全局命名空间(防止局部变量与全局变量冲突)。 

所以有下面的匿名函数定义


2.定义匿名函数

function(parameter-list)

{

statement;

};

这种函数定义不需要指定函数名,最后有个分号,所以也有人说是函数表达式

实际上是定义了一个函数对象(Function实例),可以将该对象赋给一个变量,通过该变量来调用匿名函数, 例如 

var a = function(myname) { alert("a");}

a("ccc");


JQuery里源代码都是这么定义的 所以新手迷糊:

(function( global, factory ) {

XXXX;

}(typeof window !== "undefined" ? window : this,                                            function( window, noGlobal ) { 

XXX

 }));


所以可以定义匿名函数并立即调用(自调用匿名函数):


比如:

(function() { 
alert('water'); 
})();

再比如:

(function( window, undefined ) { 

//jquery的所有代码 
})( window ); 

还比如:

(function(){ 
alert('water'); 
}());//有点强制执行的味道~ 


匿名函数表达式模式只不过是通过括号或者void告诉编译器,把function(){}当作函数表达式来解释罢了。这其中并没有那么复杂的优先级和void操作符原理。这只不过是一个简单的语法转换

只要符合函数表达式的语法,我们就可以创建出N种匿名函数代码模式,比如

!!function(){
   alert('yo');
}()
+function(){
   alert('yo');
}()


3,。使用Function类来定义匿名函数

臃肿最后一个参数容易臃肿 , 不推荐使用


展开阅读全文

没有更多推荐了,返回首页