私はこれをしたいと言います:
function z(){return function(){a = 4}
}
function b(){
var a;
c = z();
c();
}
をスキップしたいのですがc();
、代わりに、返された関数を呼び出し元スコープに戻ったらすぐに実行して、それを操作できるようにしたいのです。
この例では、 a は値 4 を取得する必要があります。
方法はありますか?乾杯
私はこれをしたいと言います:
function z(){return function(){a = 4}
}
function b(){
var a;
c = z();
c();
}
をスキップしたいのですがc();
、代わりに、返された関数を呼び出し元スコープに戻ったらすぐに実行して、それを操作できるようにしたいのです。
この例では、 a は値 4 を取得する必要があります。
方法はありますか?乾杯
return 関数をすぐに実行できるはずです
z()();
いいえ、それは不可能です ( のようなトリックを使用しないとeval
)。によって返される関数のスコープを変更することはできませんz
。
あなたの例は、閉鎖なしでより単純になる可能性があります。あなたが求めているのは
function c() {
a = 4;
}
function b() {
var a;
c(); // should change variable a
return a;
}
b(); // is expected to return 4, but does not
関数のスコープを変更したり、スコープ オブジェクト (変数へのポインターなど) を渡したりすることはできません。ただし、関数によってプロパティが変更されるオブジェクトを渡すことができます。
function z(obj) {
return function() {
obj.a = 4;
};
}
function b() {
var o = {};
z(o)(); // as mike and others said, this is the same as yours
// - you don't need the c variable
return o.a;
}
b(); // returns 4 now
escaparello も同様のことを行いましたが、オブジェクトを としてではthisValue
なく、無名関数に渡しただけz
です。私のほうが理解しやすく、z
クロージャーをよりうまく活用していると思います。
非常に奇妙に思えますが、このようなことをしたいですか?
function z(){
return function() {
this.a = 4;
return this;
}
}
function b(){
var obj = { a : 0 };
var c = z().apply(obj);
console.log(c.a);
}
b();
これを試して
function z(){
return function(){
return 4;
}
}
function b(){
var a;
a = z()();
}