使用.call()立即调用函数是否正确?

时间:2016-03-29 19:54:00

标签: javascript

- 使用.call()在声明后立即调用函数而不是像parens那样使用语法是一种正确的方法: 而不是使用:

(function([params]){ 
    //Code goes here 
})(/*params*/);

我们可以这样做吗?:

(function(/*possible params*/){
    //Code goes here
}).call(/*scope, [params]*/);

我在博客或页面中读到使用.call()可以匿名调用函数,所以我认为这样做是正确的。 但我不确定2的哪种方式更好。我发现使用第一种方法可能更容易。

另外,我是否可以使用这个即时调用函数,在文字对象或函数构造函数中,在该对象内创建一个变量,在创建对象时,在一个即时自我执行的函数内执行某种算法计算该值? I.E:这个例子是非常愚蠢的例子,但...... 抱歉这个愚蠢的例子,我想不出更好的东西:

function Person(name, sex){
    this.name = name;
    this.sex = sex;
    this.description = (function(){
        let desc = "";
        let gender = "";
        if (sex == "male"){
            gender = "male";
        }
        else if (sex == "female"){
            gender = "woman";
        }
        desc += "I am a "+gender+" and my name is "+name;
        return desc;
    })(name, sex);
}

var p1 = new Person("Alice", "female");
alert(p1.description);

我测试了它并且它有效,因此我假设可以完成更复杂的事情并将变量设置为私有。我对吗? 如果你能解决我对此的疑虑,我将感激不尽。

1 个答案:

答案 0 :(得分:1)

如果{I}内容中没有使用.call上下文,则无需使用.applythis,因为这是call所做的事情你。

我可以看到需要的唯一原因可能是在回调函数中,您需要绑定上下文以便在回调中正确使用this