javascript - 具有多个嵌套 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 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());

他们想要 var a = 1、b = 8 和 c = 6。我仍然无法理解函数作用域,因为我尝试注释掉thirdFunction和fourthFunction,这样它们就不会被调用在外部函数之前,它仍然不会改变 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());

添加了打印,您将看到所有函数都已执行

关于javascript - 具有多个嵌套 IIFE 的函数作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51689197/

相关文章:

javascript - 使用 Ajax 发布评论而不刷新页面?

javascript - NodeJS : Cannot read property 'hide' of undefined

javascript - 在 IIFE 中两次声明一个变量

javascript - 了解 IIFE

javascript - 为什么我不能要求构造函数并立即将其与 browserify 一起使用?

javascript - 点击关闭按钮后,点击 Youtube 视频不关闭

javascript - Javascript 中箭头函数(粗箭头 =>)的确切解析优先级是什么?

c++ - 带初始化的while语句

c# - 为什么我可以声明一个与父作用域中的变量同名的子变量?

javascript - 如果条件发生,停止 IIFE 的执行