說我要做到這一點:返回自執行功能
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。
有沒有辦法? 歡呼
不,這是不可能的(不使用像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(){
return 4;
}
}
function b(){
var a;
a = 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();
'b()'拋出一個錯誤「''a'不是一個函數'」 – Bergi
對不起太倉促了。 – Heinrich
你究竟是什麼意思?什麼範圍應該改變?順便說一句,你不需要'c'變量,你可以做'a()()'。 – Bergi