zoukankan      html  css  js  c++  java
  • JavaScript变量提升、作用域

    一、变量提升

    JavaScript中,var声明的变量可以在使用后再声明,因为函数及变量的声明都将被提升到函数的最顶部。

    x = 2;
    console.log(x); //输出:2
    var x;

    变量的声明会提升到顶部,而初始化工作则保留在原处。
    如果上面代码改成这样,则值是undefined。
    备注:undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。

    console.log(x); //undefined
    var x = 2;

    二、作用域

    作用域是可访问变量、对象、函数的集合。

    JavaScript的作用域不是以花括号包围的块级作用域,而是由函数决定。

    if(true){
    var x = 1;
    }
    console.log(x); //输出:1

    变量在函数内声明,变量为局部作用域。
    局部变量:只能在函数内部访问。

    下面这样会报错。

    function test(){
       var x = 1;//局部变量
    }
    console.log(x); //报错

    全局变量:变量在函数外定义,在所有地方都可使用。
    还有一种特殊情况,如果变量在函数内没有声明(没有使用var),即为全局变量。
    如果是在函数外调用某个函数内的全局变量,则需要先调用这个函数,否则会报错。

    var y = 2;//全局变量
    function test(){
       x = 1;//全局变量
    }
    test(); //这里需要先调用test,否则下面x会报错
    console.log(x); //输出:1
    console.log(y); //输出:2

    在一个函数中引用一个变量时,会先搜索当前函数作用域(局部作用域),没有找到则搜索其上层作用域,一直到全局作用域。

    var x = 2;
    function test(){
        var x = 1;
        console.log(x); //输出:1    
    }
    test(); 
    var x = 2;
    function test(){    
        console.log(x); //输出:2    
    }
    test(); 
    var x = 2;
    function test(){
        //值:undefined
        //因为先搜索test的作用域找到x变量,所以上层作用域定义的x被屏蔽,但执行到console.log时x还没初始化
        console.log(x); 
        var x = 1;
    }
    test(); 
  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086928.html
Copyright © 2011-2022 走看看