如何在严格模式下实现以下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的扩展,以应对这种特殊情况。