我正在尝试在调用variable
的{{1}}内重复使用function
,但它不会按照我认为应该的方式运行;
callback
我无法理解这是否与闭包相关的问题,但起初我预计another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"
function a(fn){
var someval = "some-value";
return fn();
}
function callingfn(){
return a.call(this, function(){
console.log(someval)
})
}
function another(){
var sv = "somevalue";
return function(){
console.log(sv);
}
}
中的someval
将被定义。
我哪里错了?
答案 0 :(得分:6)
函数fn()
与a()
不同,但它接收fn
作为参数。
您可以将someval
作为参数发送。
another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"
function a(fn){
var someval = "some-value";
return fn(someval);
}
function callingfn(){
return a.call(this, function(someval){
console.log(someval)
})
}
function another(){
var sv = "somevalue";
return function(){
console.log(sv);
}
}
或者简单地将var someval
声明为全局范围,目前它位于使其成为本地的函数内。
希望这有帮助。
答案 1 :(得分:1)
试试这个:
another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"
var someval;
var sv;
function a(fn){
someval = "some-value";
return fn();
}
function callingfn(){
return a.call(this, function(){
console.log(someval)
})
}
function another(){
sv = "somevalue";
return function(){
console.log(sv);
}
}
答案 2 :(得分:1)
在函数范围之外定义someval
:
var someval; // <- outside of the scope of any one function
another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"
function a(fn){
someval = "some-value"; // <-remove "var" to access the variable outside the scope
return fn();
}
function callingfn(){
return a.call(this, function(){
console.log(someval)
})
}
function another(){
var sv = "somevalue";
return function(){
console.log(sv);
}
}