返回一个自执行的函数
Returning a self executing Function
假设我想这样做:
function z(){return function(){a = 4}
}
function b(){
var a;
c = z();
c();
}
我想跳过c();
,但是我想在调用者作用域返回时立即执行返回的函数,以便我可以使用它。
在这个例子中,a应该得到值4。
有办法吗?欢呼声
您应该能够使用
立即执行返回函数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()();
}
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环