JavaScript基础:JS函数中声明的所有变量在整个函数中都是有定义的

JavaScript基础:JS函数中声明的所有变量在整个函数中都是有定义的

JS函数中声明的所有变量在整个函数中都是有定义的,这名话是什么意思呢?知道这个又有什么用呢?

我先说一下基本概念:

变量的作用范围又称为作用域,是指某变量在程序中的有效范围。根据作用域,变量可以分为全局变量和局部变量。

  • 全局变量的作用域是全局性的,即在整个JavaScript程序中,全局变量处处都在。
  • 而在函数内部声明的变量,只在函数内部起作用。这些变量是局部变量,作用域是局部性的;函数的参数也是局部性的,只在函数内部起作用。

在函数内部,局部变量的优先级比同名的全局变量优先级要高;如果存在与全局变量名称相同的局部变量,或者在函数内部声明了与全局变量同名的参数,那么,该全局变量将不再起作用。

让我们慢慢来看:

看下面这个函数:

1
2
3
4
5
6
7
<script type="text/javascript">
    var a='hello';
    function f(){
        alert(a);
    }
    f();
</script>

这个函数的结果是我们想象的那样,弹出“hello”字符串。

那么再看下面这个函数:

1
2
3
4
5
6
7
8
<script type="text/javascript">
    var a='hello';
    function f(){
        alert(a);
        var a="word"
    }
    f();
</script>

是弹出“hello“吗?不是。为什么呢?就是因为标题中的那名话:JS函数中声明的所有变量在整个函数中都是有定义的。也就是说我在函数中声明了var a="word"在虽然是在弹出之后声明的但它在函数中是有定义的。也就是说函数弹出的a是由后面一句var a=”word” 所定义的a。
那么弹出的是“word”吗?也不是。这里还有一条规则:虽然局部变量在整个函数体中都是有定义的,但是在执行var声明之前,它是不会被初始化的,也就是说弹出的是一个没有被初始化的变量,那当然弹出的是undefined,为什么会这样?这是规则。没有别的解释。

那么下面这个函数:

1
2
3
4
5
6
7
8
9
<script type="text/javascript">
    var a='hello';
    function f(){
        alert(a);
        var a="word"
        alert(a)
    }
    f();
</script>

如果你明白了上面讲的,你应该会想到,第一次弹出的是undefinedr第二次弹出的是word,就是这样。

这对我们有什么用呢?
这说明为什么将所有的变量声明集中起来放置在函数的开头是一个好的习惯。
你也一直是这样做的,我也是,可现在我明白了为什么我要这样做,呵呵。

站点统计