zoukankan      html  css  js  c++  java
  • javascript的函数作用域及声明提前

    废话不说;先来段代码;

    var scope='global';
    function test(){
        alert(scope);        // 输出undefine;而不是global
        var scope='local';  
        alert(scope);        // 输出local
    }
    test();

    脑算下;你可能会认为第一alert会输出global;

    但是事实上第一个alert输出的是undefined;

    这是怎么回事呢?

    要探讨这个问题首先要解释下两个概念;

    1:函数作用域:

        函数作用域指的是函数内声明的变量只在此函数内有效;

    2:声明提前:

        声明提前的意思是说在函数内任何位置声明的变量都会提前至函数最上边首先解析;

    理解声明提前的概念后也就是说上面这段代码等价于如下;

    如果从字面上没能理解这个声明提前;那么从代码中就容易懂了;

    var scope='global';
    function test(){
        var scope;           // 先声明了此变量
        alert(scope);        // 因为还未赋值;所以是undefine
        scope='local';       // 赋值
        alert(scope);        // 输出local
    }
    test();

    那么引申出来的经验也就是说在函数体内首先把要用到的变量都在函数开始就声明;

    而不是说用到的时候才声明变量;

    至于为什么第一个alert不是输出global;

    因为函数体内的局部变量是会遮盖全局变量的;

    想必不用过多解释;

    白俊遥博客

  • 相关阅读:
    mysql
    关于的字符串的总结(群,子群,KMP算法,正则表达式):
    正则表达式中[],,B的用法:
    链表
    numpy学习笔记
    算法的笔记 -概念性初始
    单线程实现了多任务异步协程
    windows安装redis出现的小问题
    将虚拟机的ip改为静态
    nosql与mysql的区别?
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5373093.html
Copyright © 2011-2022 走看看