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

How can I implement the following JavaScript closure in strict mode?

本文关键字:实现 JavaScript 闭包 模式      更新时间:2023-09-26

以下代码

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

产生以下错误:

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

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

由于var i无论如何都会被提升到function blah作用域的顶部,因此您可以执行以下操作:

'use strict';
function blah() {
    var i;
    function inner() {
        console.log(i);
    }
    if (1 ==21) {
    }
    else {
        i = 10;
    }
}​

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

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

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

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

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