【发布时间】:2018-06-15 16:10:55
【问题描述】:
如果我有一个随时间变化的变量,并且我想保留它的特定实例,我必须将它包装在一个闭包中,如下所示:
function test(){
var x = Math.random();
// Is there an alternative to using the following closure:
var printnum = (function(num){
return function(){
console.log(num);
}
})(this.x); // Because I think this is ugly
return printnum;
}
var a = test();
var b = test();
a(); //number
a(); //same as above
b(); //different number
b(); //same as above
在 PHP 中,您可以像这样使用 use:
$a = rand();
function () use ($a) {
echo($a);
}
我非常感谢这一点,因为您会立即看到正在注入的变量,它没有像 js 中那样列在最底部:(function(b){})(a); 也没有过多的括号。我尝试使用.apply() 和.call() 进行试验,但它们都执行该函数,我只想在某种状态下注入一个变量。
我想我只是要求一种不存在的语言功能,但请证明我错了。有什么想法吗?
【问题讨论】:
-
每个人都提供了非常有价值的意见,我希望我能给你所有的分数。你们都展示了许多实现同一目标的方法,谢谢。
-
带有
this.x的问题不再有任何意义,答案也不符合问题。
标签: javascript php scope closures