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

标签 javascript

- 使用 .call() 在声明后立即调用函数而不是使用带括号的语法是否是正确的方法,例如: 而不是使用:

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

我们可以这样做吗?:

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

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

另外,我可以使用这个即时调用函数在文字对象或函数构造函数内创建一个变量,在该对象内创建一个变量,该变量的值是在创建对象时在即时自执行函数内执行某种算法计算得出的吗? 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);

我测试了它并且它有效,所以我假设可以完成更复杂的事情并且将变量设为私有(private)。我对吗? 如果您能解决我对此的疑问,我将不胜感激。

最佳答案

如果 IIFE 函数中没有使用 this 上下文,则无需在 IIFE 函数上使用 .call.apply因为这就是 call 为您所做的事情。

我认为需要它的唯一原因可能是在回调函数中,您需要绑定(bind)上下文才能在回调中正确使用this

关于javascript - 使用 .call() 立即调用函数是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293910/

相关文章:

javascript - 项目导入 Chrome+Codio 时未加载库

javascript - 将 Angular ECharts 导入 Stackblitz 15.1 项目?

javascript - 每当调用其他类中的方法时调用该方法

javascript - 如何使用jquery排除数组中的空值和键?

javascript - 网络图像未在 React Native 中显示

JavaScript DOM 问题

javascript - sailsjs 其中多对多关系包含

javascript - 使用 gatsby-plugin-intl 调整 slug/routing

javascript - 如何自定义jquery-steps?

javascript - 仅当文档与数据库不同时才更新文档?