Javascript 具有多个嵌套IIFE的函数范围';s
我在这个JavaScript练习中遇到了问题。我得到了一个函数,它定义了三个不同的变量/值对,在这个函数中有多个嵌套的IIFE,它们改变了相同的值。练习的目标是将变量的值更改为某个值。下面是我收到的代码:Javascript 具有多个嵌套IIFE的函数范围';s,javascript,scope,iife,Javascript,Scope,Iife,我在这个JavaScript练习中遇到了问题。我得到了一个函数,它定义了三个不同的变量/值对,在这个函数中有多个嵌套的IIFE,它们改变了相同的值。练习的目标是将变量的值更改为某个值。下面是我收到的代码: var scopeExercise = function() { var a = 1, b = 2, c = 3; result = "a: " + a + ", b: " + b + ", c: " + c; (function firstFunction()
var scopeExercise = function() {
var a = 1,
b = 2,
c = 3;
result = "a: " + a + ", b: " + b + ", c: " + c;
(function firstFunction() {
var b = 5,
c = 6;
(function secondFunction() {
var b = 8;
(function thirdFunction() {
var a = 7,
c = 9;
(function fourthFunction() {
var a = 1,
c = 8;
})();
})();
})();
})();
return result;
};
console.log(scopeExercise());
他们希望变量a=1,b=8,c=6。我仍然无法理解函数的作用域,因为我已经尝试注释第三个函数和第四个函数,这样它们就不会在外部函数之前被调用,也不会改变var a、b和c的值。另外,我不明白为什么嵌套函数没有被执行,因为它们应该被立即调用。试试这个:
var scopeExercise = function () {
var a = 1, b = 2, c = 3;
(function firstFunction() {
b = 5;
c = 6;
console.log('firstFunction()');
(function secondFunction() {
b = 8;
console.log('secondFunction()');
(function thirdFunction() {
a = 7;
c = 8;
console.log('thirdFunction()');
(function fourthFunction() {
a = 1,
c = 6;
console.log('fourthFunction()');
})();
})();
})();
})();
result = "a: " + a + ", b: " + b + ", c: " + c;
return result;
}
console.log(scopeExercise());
添加了打印,您将看到所有函数都已执行您必须将赋值上方的函数移动到
结果
,否则这是不可能的。如果您想更改scopeExercise
scope变量,请在嵌套函数中去掉var
s,否则您将创建一个新绑定。嘿,Meir Keller,除了在每个函数上输入var关键字之外,您能解释一下我做错了什么吗?为什么要将结果变量放在底部?还有,你为什么在每个IIFE的末尾加上(a,b,c)?我更新了我的答案。没有必要通过a、b、c。我认为,因为var关键字是函数作用域,所以在您使用的每个函数中,都有一个新的a、b或cYou实例,您可以在这里阅读关于var关键字的内容,而不是let关键字: