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(); 
  • 相关阅读:
    安信天行全方位信息安全态势感知平台建设与运营
    SQL基础总结——20150730
    中兴推“小兴看看”,诠释智能家电的真谛
    Java 线程第三版 第九章 Thread调度 读书笔记
    3930: [CQOI2015]选数|递推|数论
    S​D​I​与​A​S​I 接口具体解释介绍
    通过双重for循环来找到JSON中不反复的数据
    蓝桥杯 2016/3/17 測试 前6题题解...
    [疯狂Java]JDBC:事务管理、中间点、批量更新
    Linux下搭建Memcached缓存系统
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086928.html
Copyright © 2011-2022 走看看