任何人都可以解释这个功能的作用。
我不理解函数定义解析(组)传递的部分'data'
。
function getData(data) {
data = (data === undefined) ? this.defaultData() : data;
var self = this;
return (function parse(group) {
return self.change('groupTo', groupExp, group);
}(data));
}
现在我知道这是一个IIFE
,我现在想知道'arg'
是否可以在doSomething()
(function (local_arg) {
doSomething(local_arg);
})(arg);
答案 0 :(得分:3)
这不是一段好的代码。我不知道从哪里开始做坏事......
此函数定义了一个函数,它无法从任何其他作用域访问,并且不可重用,只是为了使用data参数返回其调用。
可以简单地说外部回报return self.change('groupTo', groupExp, data);
答案 1 :(得分:1)
如果在不传递任何参数的情况下调用getData()
函数,则函数中数据变量的值未定义。
所以在这个Line使用了三元运算符。
data = (data === undefined) ? this.defaultData() : data;
因此它将检查data === undefined
条件是否为真。因此它会将this.defaultData()
的值赋给data属性
简而言之,当data
的值为undefined
时,接下来的时间就是
data = this.defaultData()
如果数据有值意味着调用具有参数的函数getData("Hi")
,那么它将被评估为
data = data // data = Hi
现在var self = this;
用于保留嵌套函数中this
的上下文,如下所述。
return (function parse(group) {
return self.change('groupTo', groupExp, group);
}(data));
如果我尝试在嵌套函数中使用this
,那么它将指向全局对象,即JS中的window
对象。
下面的代码arg
在函数内部可用,因为我们在调用IIFE时传递它,因此可以传递doSomething函数的调用。
(function (local_arg) {
doSomething(local_arg);
})(arg);
答案 2 :(得分:1)
在这种模式中:
(function (local_arg) {
doSomething(local_arg);
})(arg);
...函数立即执行,参数local_arg
将获取传递的参数的值,即arg
。所以上面的内容与以下相同:
doSomething(arg);
在某些情况下,arg
是一个更复杂的表达式,并且您需要多次使用它,或者您需要只需要在本地知道的变量,IIFE模式可能很有用。 / p>