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等
  • 引用数据类型是保存在堆内存中的对象
相关文章
相关标签/搜索