Javascript返回函数定义函数

问题描述 投票:1回答:3

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

在这种模式:

(function (local_arg) {
   doSomething(local_arg);
})(arg);

...函数立即执行,参数local_arg将获取传递的参数的值,即arg。所以上面的内容与以下相同:

doSomething(arg);

在某些情况下,arg是一个更复杂的表达式,并且您需要多次使用它,或者您需要只需要在本地知道的变量,IIFE模式可能很有用。


3
投票

这不是一段好的代码。我不知道从哪里开始做坏事......

此函数定义了一个函数,它无法从任何其他作用域访问,并且不可重用,只是为了使用data参数返回其调用。外部回报可以很简单

return self.change('groupTo', groupExp, data);

1
投票

如果你调用getData()函数而不传递任何参数,那么函数中数据变量的值是未定义的。所以在这个线上使用了三元运算符。

data = (data === undefined) ? this.defaultData() : data;

所以它将检查data === undefined条件是否为真。因此它会将this.defaultData()的值赋给数据属性简而言之,当data的值为undefined时,接下来的时间就是这种情况

data = this.defaultData() 

其他如果数据有值意味着用参数调用函数getData("Hi")那么它将被评估为a

data = data // data = Hi

现在,var self = this;用于保存嵌套函数中this的上下文,如下所述。

    return (function parse(group) {
        return self.change('groupTo', groupExp, group);
    }(data));

没有self =这如果我尝试在嵌套函数中使用this那么它将指向JS中的全局对象即window对象。

在下面的代码中,arg在函数内部可用,因为我们在调用IIFE时传递它,因此可以传递doSomething函数的调用。

(function (local_arg) {
   doSomething(local_arg);
})(arg);
© www.soinside.com 2019 - 2024. All rights reserved.