我遇到了一些混乱关于针对其中一个回调定义作用域。
function test(){
var b = 3
var fun = function(){
var printingFunction = function(){
console.log(b)
}
printingFunction()
}
return fun
}
test()() //prints 3, as expected because of closures
但是,下列不工作
function test(){
var b = 3
var fun = function(cb){
cb()
}
return fun
}
test()(function(){console.log(b)}) //b is not defined
我希望的是,由于函数作为参数传递,并没有被定义,它的定义发生内部“乐趣”,因此将有机会获得到B。 相反,它看起来很像功能首先在它的通过,然后作为参数传递的范围限定。 任何想法/指针?
编辑:一些额外的指针。
someFunction("a")
我们不可能要求“一”是一个定义。 什么隐含在这里发生的是,“一个”被分配给一个由参数名称,以便命名变量var argumentNameInDefintion = "a"
。 这发生在someFunction的身体。
同样,我们不能权利要求{}
是在一个定义: someFunction({})
那么,为什么会:
someFunction(function(){})
决定function(){}
是一个定义是超越我。 如果这是
var a = function(){}
someFunction(a)
一切都将完全合理。 也许它是多么的语言工作。