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等
  • 引用數據類型是保存在堆內存中的對象
相關文章
相關標籤/搜索