开发者社区> 问答> 正文

Javascript之全局变量和局部变量

Javascript之全局变量和局部变量

展开
收起
社区秘书 2019-12-16 14:34:48 1084 0
1 条回答
写回答
取消 提交回答
  • 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量。

    一、局部变量和全局变量重名会覆盖全局变量

    var a = 1;
    function test1() {
    var a = 2;
    alert(a);
    }
    test1();// 2
    这里的函数中的定义的a是局部变量,它的作用域为函数{}之间,函数外定义的a为全局变量,它的作用域为整个程序(描述有点不准确)。在函数中的局部变量和全局变量重名,局部变量会覆盖全局变量。

    二、提到全局变量与局部变量不得不说明的一个知识点就是变量提升。‘与C/C++逐行执行代码不同,JS引擎的工作方式是,先获取所有被声明的变量再逐一执行,所有变量的声明语句都会被提升到当前代码块的头部’。注:代码块指的是function的一个{},通常的if、while、for的{}中变量不会提升。

    了解了变量提升了之后我们用以下代码来演示:

    var a = 1;
    function test1() {
    alert(a);
    var a = 2;
    alert(a);
    }
    test1();
    alert(a);//undefined 2 1 为什么结果不是1 2 1呢?原因就在于代码提升。由于代码提升的效果所以实际执行的代码是这样的:

    var a = 1;
    function test1() {
    var a;//局部变量与全局变量重名时会覆盖全局变量,此时的a只有声明却未定义
    alert(a);//所以执行alert值为undefined
    a = 2;
    alert(a); 欢迎加入全栈开发交流群一起学习交流:864305860 }
    test1();
    alert(a);//undefined 2 结语

    感谢您的观看,如有不足之处,欢迎批评指正。

    2019-12-16 14:34:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载