如何在严格模式下实现以下JavaScript闭包?

时间:2012-08-02 23:15:18

标签: javascript closures

以下代码

'use strict';

function blah() {

    if (1 ==21) {
    }
    else {
        var i = 10;
        function inner() {
            console.log(i);
        }
    }
}

产生以下错误:

  

SyntaxError:在严格模式代码中,只能在声明函数   顶级或立即在另一个功能中。

如何编写我的函数内部,以便它可以访问我的变量'i'?根据严格模式,我需要将函数移到顶部,但此时'i'尚未声明

4 个答案:

答案 0 :(得分:4)

由于var i将被提升到function blah范围的顶部,您可以这样做:

'use strict';

function blah() {
    var i;
    function inner() {
        console.log(i);
    }

    if (1 ==21) {
    }
    else {
        i = 10;
    }
}​

答案 1 :(得分:2)

inner()哪里需要访问?这是否适用于您的目的?:

var inner = function () { ... };

答案 2 :(得分:1)

它已被声明,因为var声明了整个函数的变量,而不是块。

答案 3 :(得分:1)

必须将内部函数声明为函数表达式,如下所示:

var inner = function () {
    console.log(i);
};