標籤:瀏覽器 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的範圍