1

以下代码

'use strict';

function blah() {

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

产生以下错误:

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

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

4

4 回答 4

4

由于无论如何var i都会被提升到function blah' 范围的顶部,您可以这样做:

'use strict';

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

    if (1 ==21) {
    }
    else {
        i = 10;
    }
}​
于 2012-08-02T23:20:08.733 回答
2

inner()需要从哪里访问?这对您的目的有用吗?:

var inner = function () { ... };
于 2012-08-03T00:01:45.127 回答
1

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

var inner = function () {
    console.log(i);
};
于 2012-08-03T00:15:37.893 回答
1

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

于 2012-08-02T23:19:29.753 回答