[英]How to get a value from anonymous function?
这是代码和小提琴 :
var test = function(){
return{
value: "hi",
func1: function(){
func2();
}()
};
}();
function func2(){
alert(test.value);
}
谁能告诉我我做错了什么? 我无法获得test.value。
从IIFE中为IIFE中的func1
属性调用func2()
,该属性构造要分配给test
的对象。 在分配test
之前。 并且它尝试访问尚未undefined
的变量的test.value
属性,并因此引发ReferenceError
。 (另请参见对象文字声明中的自我引用 )
我想你在找
var test = function(){
return{
value: "hi",
func1: function(){
func2();
} // <-- no invocation here, make `func1` a method not `undefined`
};
}();
function func2(){
alert(test.value);
}
test.func1(); // "hi"
( 更新小提琴 )
如果运行此代码,将会得到undefined
。 为什么? 好吧,因为您没有给test
足够的时间来实际启动自身 (以及您正在以同步方式进行操作的事实)。
试试这个异步解决方案。
var test = function(){
return{
value: "hi",
func1: function(){
setTimeout(function(){ func2(); }, 50);
//you can also just do
//setTimeout(func2, 50);
}()
};
}();
function func2(){
alert(test.value);
}
还要注意,由于func1本身会自动发出发票,因此您不会将任何内容返回给func1。 稍后,如果您尝试执行test.func1()
,它将无法正常工作。
问题是您将对象文字分配给test
。 但是,要构建该对象,请调用func2
。 该函数尝试访问test
,但是到那时它仍未定义。
因此,在将对象分配给test
之后,应该调用func2
:
var test = function(){
return {
value: "hi",
};
}();
test.func1 = function(){
func2();
}();
function func2(){
alert(test.value);
}
但是,请注意,这有点奇怪,因为匿名函数不会返回任何值。 func2(); test.func1 = undefined
func2(); test.func1 = undefined
会更自然。
如Bergi所述,您想使用Imidiatelly调用函数表达式(IIFE),但是您的语法错误。
看到固定的小提琴
var test = (function(){
return{
value: "hi",
func1: function(){
func2();
}
};
})();
function func2(){
alert(test.value);
}
在函数的开头和结尾处使用(在实际立即调用它之前
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.