Javascript返回函数定义函数

时间:2017-08-03 07:22:12

标签: javascript jquery

任何人都可以解释这个功能的作用。 我不理解函数定义解析(组)传递的部分'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);

3 个答案:

答案 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>