JS的範圍

來源:互聯網
上載者:User

標籤:瀏覽器   ons   web瀏覽器   刪除   turn   訪問   屬性   建立   new   

變數包含兩種資料類型的值:

1. 基本類型值如undefined、boolean、Null、number、string,這類值是可以直接操作的,有讀寫權

2.參考型別值:儲存在記憶體中的對象。可以引用添加屬性,不能對值進行操作,只有讀的許可權。可以對其添加屬性和方法,也能改變或刪除其屬性或方法

這兩種值在進行複製時機制也不同:

1.基本類型值:靠值

  var num1=5;

  var num2=num1;

  num1+=;

  alert(num2) //5

num1與num2是相互獨立的,相當於開闢一塊新的記憶體,num1和num2再進行改變,互相不會影響。

2.參考型別值:靠引用

  var obj1=new object();

  var obj2=obj1;

  obj1.name="jone";

  console.log(obj2.name) //jone

相當於obj1和obj2都指向object()這個對象所在記憶體,屬性一樣。若object()改變,obj1、obj2都會改變。

 

參數的傳遞:EMACScript中所有函數的參數傳遞都是按值傳遞的(開闢新內寸,參數與被當做參數傳遞的對象互不干擾)

1.基本類型值被當做參數傳值是按照值的方式傳遞,很好理解。

  function plus(num){

    num+=10;

    return num;

  }

  var num1=20;

  var num2=plus(num1);

  alert(num1); //20

  alert(num2); //30

 2.參考型別值被當做參數傳遞也是按值傳遞的(改變參數並不能改變被當做參數傳遞的對象,參數和傳遞對象駐紮在兩塊不同的記憶體中)

function setName(obj){
obj.name="jone";
obj = new Object();   //參數在此被改變,加上name屬性
obj.name="linda";
alert(obj.name)   //linda  局部變數,函數執行之後被立即銷毀,不複存在
}
var person= new Object();
setName(person)
alert(person.name)  //jone  並沒有變成linda

函數的參數相當於局部變數,被當做參數傳遞的對象是全域對象/變數。

 

執行環境和範圍:

執行環境定義了變數或者函數訪問其他資料的許可權。

web瀏覽器全域執行環境被認為是window對象,瀏覽器退出時全域執行環境才會被銷毀。

每個函數都有自己的執行環境,執行流進入某一函數時,函數環境就會被推入一個環境棧中,函數執行之後棧將其彈出,控制權返回給之前的執行環境。該機制控制EMACScript的執行流程。讓執行環境有序進行。

代碼運行到某一環境時候,會建立變數對象的範圍鏈。範圍鏈讓執行環境的變數和函數被有序訪問。

內部環境可以通過範圍鏈訪問所有的外部環境,但外部環境不能訪問內部環境中的任何變數和函數。

局部環境會現在自己的變數對象中搜尋變數和函數,如果搜尋不到再搜尋上一級範圍鏈。

 

JS的範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.