- 使用.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);
我测试了它并且它有效,因此我假设可以完成更复杂的事情并将变量设置为私有。我对吗? 如果你能解决我对此的疑虑,我将感激不尽。
答案 0 :(得分:1)
如果{I}内容中没有使用.call
上下文,则无需使用.apply
或this
,因为这是call
所做的事情你。
我可以看到需要的唯一原因可能是在回调函数中,您需要绑定上下文以便在回调中正确使用this
。