在JavaScript中,函数可以具有属性。像这样:
var f = function(){ console.log("Hello!"); }
f.x = "Whoohoo";
如何从变量f超出范围后可能长时间调用的x
内的代码中检索f()
?
答案 0 :(得分:4)
您可以使用property accessor,就像作业一样。
var f = function() { console.log("Hello! " + f.x); }
f.x = "Whoohoo";
console.log(f.x);
f();

对于稳定访问,您可以使用命名函数
var f = function foo() { console.log("Hello! " + foo.x); }
// ^^^ >>>>>>>>>>>>>>>>>>>>>>>>>>> ^^^
f.x = "Whoohoo";
console.log(f.x);
f();

答案 1 :(得分:0)
如果你需要更强大(但也更冗长):
var f = (function(){
var func = () => {
console.log(func.a)
}
return func
})()
f.a = 'Whoohoo'
// trying to break it
var a = f
f = 'somethingelse'
a()
答案 2 :(得分:0)
如果您正在寻找的只是从函数f中访问该属性,您只需引用函数对象(如果它是函数表达式,则通过变量名称,或者通过函数名称引用如果它是一个功能声明)。
例如:
var f = function(){ return f.x; };
f.x = "Whoohoo";
// f() => "Whoohoo"
var b = function(){ return f.x; ];
// b() => "Whoohoo"
但是,你提到在变量f超出范围后很长时间内调用f"与JavaScript的词汇范围相矛盾。除非您从定义函数的同一范围执行此操作,否则不能调用函数f,或者从引用函数定义位置的子范围调用函数f。如果您超出范围",则调用f将引发参考错误。