JS中变量提前简单分析

来源:互联网 发布:战地2网络对战平台 编辑:程序博客网 时间:2024/05/01 16:25
关于JS中的变量申明提前,最简单的就是下列例子
var scope = "global";function f() {    alert(scope);    var scope = "local"; //覆盖全局变量    alert(scope);}

大家可能误以为函数f的第一个alert会输出"global",因为代码此时还没有执行到var语句声明局部变量的代码行。

其实不然,由于函数作用域的特性,局部变量在整个函数体内始终是有定义的,亦即,在函数体内局部变量覆盖了同名的全局变量。尽管如此,只有程序执行到var语句时,局部变量才会被赋值。因此上述过程等价于,将函数体内的变量声明“提前”至函数体顶部,而变量的初始化保留在原处。

function f() {var scope; //函数体顶部声明局部变量alert(scope); //输出"undefined"scope = "local"; //变量初始化赋值alert(scope); //输出"local"}
唯一要注意的是申明提前的作用域————————只能提前到该作用域的顶端

1 0