Javascript Closure范围返回函数

时间:2017-12-21 11:09:32

标签: javascript web scope closures lexical-scope

我目前正在查看本页第二个问题的第二个解决方案,

https://www.sitepoint.com/5-javascript-interview-exercises/

我被困住了为什么你需要关闭。

function handlerWrapper(i) {

     console.log('You clicked element #' + i);

}

为什么我需要返回功能。当我尝试

console.log('You clicked element #' + i);

它不起作用。究竟是什么包括

{{1}}

在返回功能内吗?为什么它可以工作?为什么我需要在返回函数中执行它?

提前谢谢你

1 个答案:

答案 0 :(得分:1)

嗯,这很简单,让我们这样说:

function printToConsole(callback) {
    workOrSomething();
    callback();
}

function handlerWrapper(i) {
     console.log('You clicked element #' + i);
}

//This doesn't know what i you want.
printToConsole(handleWrapper); -> You clicked element #undefined

function handlerWrapper(i) {
    return function() {
        console.log('You clicked element #' + i);
    }
}

//This does
printToConsole(handleWrapper(3)); -> You clicked element #3

我希望你有这个主意......