javascript和执行步骤中的范围

时间:2015-09-02 11:52:38

标签: javascript scope

(function() {
            var a = 'g';
            function foo() {
                console.log(a);
                a = 7; //
            }
            console.log(foo(), a);
    }());

任何人都可以解释这个代码示例的逐步执行和输出。我把输出放在了未定义的7'

3 个答案:

答案 0 :(得分:3)

您正在创建一个匿名函数并立即执行(IIFE

然后,在此范围函数中:

  • 您声明了a var,其值为g
  • 您声明了一个名为foo的函数,该函数具有父函数作用域(IIFE作用域)的可见性。所以它可以看到a var。 不会立即调用此foo函数。
  • log语句中,执行foo
      记录了
    • a(值g
    • a IIFE范围内的var更改为值7
    • foo不返回任何内容
  • 然后记录:
    • foo返回undefined(无返回值)
    • 的值
    • a值,7执行后foo

所以你在控制台中:

g
undefined 7

答案 1 :(得分:0)

这是一个无需任何调用即可自动执行的自动调用函数。

执行的结果/步骤是:

  • gconsole.log(a);一起投放,因为我们最初有a="g"

  • undefined 7console.log(foo(), a);

    一起投放
    1. foo()将返回undefined,因为没有return 声明
    2. a将返回7,因为我们a=7;

答案 2 :(得分:0)

(function() {
    ...
    ...
}());

这只是一种声明匿名函数并调用它的方法

var a = 'g';
function foo() {
     console.log(a);
     a = 7; //
}
console.log(foo(), a);

这里你在javascript中声明一个变量a ='g'如果你使用关键字“var”声明一个变量该变量的范围是函数,这意味着在该函数内部(也在子函数中)每个人都可以用它。

然后你声明了一个foo函数,foo函数可以看到变量a因为foo是在前一个函数中声明的。 console.log(a)只打印a的值,这样就会打印'g'然后将a的值更改为7.

声明后你调用console.log(foo(),a),这意味着你正在执行foo并打印foo的返回值'undefined',因为没有return语句,然后打印值在执行foo之后变为7。

所以输出是:

g
undefined 7