我注释了下我的思路
我这样想正确吗?
后面问号的我不懂什么意思
可以帮我解释下吗?这种函数应用场景是什么
(function(){
})(function(){
}())
这种立即调用函数里面再写一个立即调用函数的写法叫什么?
var fun = (function(a){//定义函数表达式并定义参数a
this.a = a;//定义当前域变量a等于参数a
return function(a){//返回一个匿名函数定义参数a
a+= this.a;//a等于this.a+1
return a;//返回a
}
})(function(a,b){//??????
return a;//????
}(1,2))//??????
fun(4)
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
楼主的变量用得有点乱, 先给你改改.
每个函数都有一个单独的作用域, 除非特殊情况, 定义函数的形参时尽量不要用一样的. 不然会绕.
以上总共出现了三个函数:
函数1: 参数为a
功能: 接收一个值, 将这个值赋给this.a, 并返回函数2.
函数2: 参数为num
功能: 接收一个值, 返回这个值 + this.a
函数3: 参数为x,y
功能: 接收两个值, 返回第一个值.
函数功能已经分析清楚啦, 那就来看看上面的代码都发生了什么.
函数1需要一个参数, 把函数3当做参数传进去了, 函数3接收两个参数然后返回第一个(此处是1), 就相当于直接把1当做参数传递给了函数1.
函数1接收参数后先为执行对象定义一个属性a, 然后将传递进来的参数赋值给属性a. 再然后返回函数2.
函数2接收一个参数(此时是4), 返回这个参数 + this.a
故返回了5.
暂时没想出来应用场景,解释一下函数的表面意思。
这部分就是1 也就是把1传到了第一个匿名函数里。
也就是第一行的
a永远为1。调用了fun以后会返回参数+1的数字。
fun(1) = 2
fun(2) = 3
....
为什么一定要把代码写成这个鬼样子。。。
这种写法是自动执行的意思,后面的括号里是传入的参数。相当于
调用一样。
其实这段代码并不复杂,只不过存在多个
function,显得比较复杂,看起来比较混乱,可以分解开来,一部分一部分的看:1.首先是一个声明了一个变量:
这个很明显,定义了
fun的变量。2.变量
func的=右侧是一个表达式,这个表达式是一个立即执行函数,那么也分两部分看,先看函数声明:为了区别,这个函数可以称之为
func1.这个
func1函数接收一个参数a,返回一个函数,这个函数称之为func2。那么可以预想到,1中的fun的值就为这个返回的函数func2。3.
2中func1是个立即执行函数,那么必然会传给它一个参数,也就是func1的形参a。这个参数又是一个立即调用函数,这里比较简单,直接贴出来。返回结果就是1,也就是说
2中的func1的形参a被赋值为了1。同样地,也可以得知2中的func2由于闭包会维持a这个值。你贴的代码简化一下就得出:
至于这种场景,可以肯定的说有,而且不少。
我先贴出一个:
这是
jQuery的源码的开头部分。而且像这类写法的开源库/工具有很多,目的是为了兼容多个模块化标准,可以在浏览器以及服务器端(NodeJS)中都能使用。
是不是还有其他的应用,就不晓得了。