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

如何在严格模式下实现以下JavaScript闭包?,javascript,closures,Javascript,Closures,下面的代码 'use strict'; function blah() { if (1 ==21) { } else { var i = 10; function inner() { console.log(i); } } } 产生以下错误: SyntaxError:在严格模式代码中,函数只能在 顶级或直接在另一个功能中 如何编写函数内部,使其能够访问变量“I”?根据严格模式,我需要将函

下面的代码

'use strict';

function blah() {

    if (1 ==21) {
    }
    else {
        var i = 10;
        function inner() {
            console.log(i);
        }
    }
}
产生以下错误:

SyntaxError:在严格模式代码中,函数只能在 顶级或直接在另一个功能中


如何编写函数内部,使其能够访问变量“I”?根据严格模式,我需要将函数移到顶部,但此时“I”尚未声明,因为
var
声明了整个函数的变量,而不是块的变量。

已声明,因为
var
声明了整个函数的变量,不适用于块。

由于
变量i
将被提升到
函数blah
的范围顶部,因此您可以执行以下操作:

'use strict';

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

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

由于
var i
将被提升到
函数blah
的作用域顶部,因此您可以执行以下操作:

'use strict';

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

    if (1 ==21) {
    }
    else {
        i = 10;
    }
}​
需要从哪里访问
internal()
?这对你有用吗

var inner = function () { ... };
需要从哪里访问
internal()
?这对你有用吗

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

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

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

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

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

True,但
function
声明与
var
声明不同。@PPvG这就是严格警告存在的原因。True,但
function
声明与
var
声明不同。@PPvG这就是严格警告存在的原因。该代码(特别是块中的函数声明)在任何版本的ECMAScript中都不严格有效。它之所以能够工作,是因为所有主流浏览器都实现了对ECMAScript的扩展以应对这种特殊情况。这些代码(特别是块中的函数声明)在任何版本的ECMAScript中都不是严格有效的。它之所以能够工作,是因为所有主流浏览器都实现了对ECMAScript的扩展,以应对这种特殊情况。