var a = 3;
function c() {
alert(a);
}
(function () {
var a = 4;
c();
})();
这段代码的执行过程如下:
- 定义变量 a 并赋值为 3。
- 定义一个函数 c,该函数弹出一个对话框显示变量 a 的值。
- 定义一个立即执行函数,并在其中定义变量 a 并赋值为 4。
- 在立即执行函数中调用函数 c。
- 函数 c 弹出一个对话框显示变量 a 的值,此时输出结果为 3。
原因是在立即执行函数中定义的变量 a 只在该函数作用域内有效,并没有改变全局作用域中的变量 a 的值,而函数 c 中使用的变量 a 是从全局作用域中查找的,因此输出的是全局作用域中的变量 a 的值。