JavaScript——变量及其作用域

变量是存储信息的容器,JS变量可用来保存任何值

变量类型

  • JavaScript是一种无类型、弱检测的语言,对变量的定义不需要声明变量类型,只需要赋值即可。

变量的声明

  • 隐式和显式声明
  • 隐式为全局,显式为局部变量。隐式执行不会报错,访问它会报错。

变量作用域

全局变量
  • 所有在函数外面声明的变量都处于全局作用域中
  • 如果一个变量第一次初始化/声明的时候没有使用var关键字,那么他自动加入到全局作用域中
  • setTimeout中的函数是在全局作用域中执行的
    var Value1 = 200;
    var Value2 = 20;
    var myObj = {
    Value1 : 10,
    Value2 : 1,
    
    caleculatedIt: function(){
        setTimeout(function(){
        console.log(this.Value1 * this.Value2);
        }, 1000);
    }
    }
    
    myObj.caleculatedIt(); //4000

局部变量(处于函数级别的作用域)
  • 没有块级作用域
  • 在一个函数内定义的变量只能在函数内部访问,或者这个函数内部的函数访问。(闭包除外)
  • 局部变量的优先级大于全局变量
    • 如果在全局作用域中什么的变量在局部作用域中再次声明,那么在局部作用域中调用这个变量时,优先调用局部作用域中声明的变量

变量提升

  • 所以的变量声明都会提升到函数的开头(如果这个变量在这个函数里面)或者全局作用域的开头(如果这个变量是一个全局变量)
    function showName () {
        console.log ("First Name: " + name);
        var name = "Ford";
        console.log ("Last Name: " + name);
    }
    
    showName (); 
    // First Name: undefined
    // Last Name: Ford

  • 函数声明会覆盖变量声明(若变量声明并未赋值)
    var myName;
    function myName () {
        console.log ("Rich");
    }
    console.log(typeof myName); // function

  • 在严格模式下,如果没有先声明变量就给变量赋值将会报错

基本类型和引用类型

基本类型
  • 指简单的数据段。number、string、boolean、null、undefined
  • 按值访问,可以直接操作保存在变量中的实际值
引用类型
  • 指对象类型。比如Object、array、function、Data等
  • 引用数据类型是保存在堆内存中的对象
原文地址:https://www.cnblogs.com/wlfsmile/p/7873168.html