立即执行函数中声明非匿名函数问题

新手上路,请多包涵

题目描述

            var a=1;
            
            (function a(){
                console.log(1,a);
                a=2;
                console.log(2,a);
                delete a;
                console.log(3,a);
            })();
            console.log(4,a);

求问a=2这一句到底有什么意义?以及输出的为什么是a函数本身代码?

回复
阅读 2.8k
2 个回答

1, a=2;是相对于第一行的var a=1;而来的,主要演示变量的作用域问题.
2, 在函数表达式(就是括号括起来的函数部分)中,a的作用就是函数本身,用于自身引用(比如递归),是一个"被污染"的变量名.下面的赋值和删除都无法对a进行操作,因为它就不是一个常规的变量.

    a = 1
    // 相当于
    var a = undefinded
    a = 1
    // 且被提升为全局变量

所以闭包内部的 a 当然是函数本身了。

宣传栏