var factory = function(){ return function(){ console.log("1"); } } var jQuery = factory(); jQuery是factory的方法执行结果,所以是return后面的方法为 function (){ console.log("1"); } jQuery()是undefined,因为factory函数的执行结果没有return返回值所以是undefined var factory = function(){ return function(){ console.log("1");return 1; } } var jQuery = factory();var a = jQuery(); a的值为1,是return后面的1 var factory = function(){ return function(){ console.log("1"); } } var jQuery = factory(); var a = jQuery(); a为undefined,因为a是jQuery的执行结果,jQuery是factory的执行结果,factory的执行结果没有return值,所以为undefined
jQuery创建一个外层包裹,一个匿名函数,一个是自执行。匿名函数,就是没有函数名的函数,也就是不存在外部引用。
function(){ //代码逻辑 }
这写法是错误的,因为声明了它但是又不给名字又没有使用,所以在语法上错误的,
要调用一个函数,我们必须要有方法定位它、引用它。所以,我们要取一个名字:
var jQuery = function(){ //代码逻辑 }
jQuery使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表),那么这小括号能把我们的表达式组合分块,并且每一块(也就是每一对小括号),都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
全局变量是魔鬼, 匿名函数可以有效的保证在页面上写入JavaScript,而不会造成全局变量的污染,通过小括号,让其加载的时候立即初始化,这样就形成了一个单例模式的效果从而只会执行一次。