函数作用域和声明提前

在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域,

而JavaScript中没有块级作用域。取而代之的使用了函数作用域。变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有意义的。

 

JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。因此这个特性被称为"声明提前",即JavaScript函数里声明的所有变

量(但不涉及赋值)都被"提前"至函数体的顶部,看一下如下代码:

var scope = "global";
function f(){
    console.log(scope);  //输出"undefined"
    var scope = "local";  
    console.log(scope);  //输出"local"
}

由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是说,在函数体内局部变量遮盖了同名的全局变量。尽管如此,只有在程序执行到var语句的时候,局部变量才会被真正赋值。

 

posted @ 2015-04-27 14:30  半岛弥情  阅读(103)  评论(0)    收藏  举报