摘要:全局變量是最外圍的一個執(zhí)行環(huán)境,代碼在環(huán)境中執(zhí)行,會創(chuàng)建一個作用域鏈,用途是保證對執(zhí)行環(huán)境有權(quán)訪問所有變量和函數(shù)的有序訪問。作用域鏈中最后一個對象始終是全局執(zhí)行環(huán)境。內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,外部則不能訪問內(nèi)部。
1、基本類型和引用類型的值
* 基本類型 : 指的是簡單的數(shù)據(jù)段,五種基本類型是按值訪問的,可以直接操作保存在變量中實際的值。 * 引用類型 : 指那些可能由多個值組成的對象,引用類型的值是保存在內(nèi)存中的對象,js不允許直接訪問內(nèi)存中的位置,也就是不可直接操作對象的內(nèi)存空間。
操作對象實際是操作對象的引用而不是實際的對象,引用類型的值按引用訪問。
2、動態(tài)的屬性
引用類型的值可以添加屬性和方法,也可以刪除和修改,但基本類型不行。
//引用類型
var person = new Object(); person.name = "sheyurong"; alert(person.name); //sheyurong
基本類型添加屬性也不會報錯。
//基本類型
var name = "sheyurong" name.age = 27; alert(name.age) ; //undefined
3、賦值變量值
//基本類型
var num1 = 5; var num2 = num1; // num1 與 num2 中的5完全獨立,參與任何操作也不會相互影響
//引用類型
var obj1 = new Object(); var obj2 = obj1; obj1.name = "syr"; alert(obj.name); //"syr"; 改變其中任一變量也會影響另一個,因為兩個變量引用同一變量。
4、傳遞參數(shù)
es中所有函數(shù)的參數(shù)都是按值傳遞的,基本類型與引用類型的傳參與變量的復(fù)制一樣。
function setName(obj){ obj.name = "syr"; obj = new Object(); obj.name = "abc" } var person = new Object(); setName(person); alert(person); // "syr" //可以把函數(shù)的傳參想象成局部變量一樣
5、檢測類型
typeof可以檢測基本類型,但檢測對象時并不能知道是什么類型的對象,因此,使用instanceof操作符。
語法 :
result = variable instanceof constructor
//如果變量為引用類型的實例,則instanceof返回true
例 : person instanceof Object; // person是Object的實例嗎?
根據(jù)規(guī)定,所有引用類型都是object的實例,instanceof檢測基本類型,適中返回false,因為基本類型不是對象。
6、執(zhí)行環(huán)境及作用域
* 執(zhí)行環(huán)境決定了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了她們各自的行為。 * 每個執(zhí)行環(huán)境都有一個環(huán)境變量對象,所有變量和函數(shù)都保存在這里面,無法訪問,但是后臺會使用它。 * 全局變量是最外圍的一個執(zhí)行環(huán)境,代碼在環(huán)境中執(zhí)行,會創(chuàng)建一個作用域鏈,用途是保證對執(zhí)行環(huán)境有權(quán)訪問所有變量和函數(shù)的有序訪問。 * 作用域鏈 : 如環(huán)境是函數(shù),則最開始只包含有一個變量-arguments對象 -> 外部環(huán)境1 -> 外部環(huán)境2 ... -> 全局。
作用域鏈中最后一個對象始終是全局執(zhí)行環(huán)境。
* 內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,外部則不能訪問內(nèi)部。函數(shù)參數(shù)的訪問規(guī)則與執(zhí)行環(huán)境其他變量相同。
7、延長作用域鏈
* 使用try-catch語句的catch塊; * with語句 :
都是會在作用域鏈的前端添加一個變量對象,with可將制定對象添加到作用域鏈中。
catch創(chuàng)建新變量,內(nèi)涵跑出的錯誤對象聲明。
例 : function build(){ var qs = "aaa"; with(location){ var url = href + qs; } return url ; } //with吧location對象引入,此種就包含了location中所有屬性和方法。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102935.html
摘要:執(zhí)行環(huán)境的類型有兩種全局全局執(zhí)行環(huán)境局部函數(shù)執(zhí)行環(huán)境每個環(huán)境都可以向上搜索作用域鏈,以查詢變量和函數(shù)名但任何環(huán)境都不能通過向下搜索作用域鏈而進(jìn)入另一個執(zhí)行環(huán)境。內(nèi)部可通過作用域鏈訪問外部,外部不能訪問內(nèi)部。 變量、作用域和內(nèi)存問題 ECMAScript 數(shù)據(jù)類型 基本類型(5種): Undefined,Null,Boolean,Number,String typeof() 檢測...
摘要:在操作對象時,實際上是在操作對象的引用而不是實際的對象。為此,引用類型的值是按引用訪問的。標(biāo)記清除是目前主流的垃圾收集算法,這種算法的思想是給當(dāng)前不使用的值加上標(biāo)記,然后再回收其內(nèi)存 1.在操作對象時,實際上是在操作對象的引用而不是實際的對象。為此,引用類型的值是按引用訪問的。 2.當(dāng)從一個變量向另一個變量復(fù)制引用類型的值時,兩個變量實際上將引用同一個對象,因此,改變其中一個變量,就會...
摘要:具體來說就是當(dāng)執(zhí)行流進(jìn)入下列任何一個語句時,作用域鏈就會得到加長語句的塊和語句。這兩個語句都會在作用域鏈的前端添加一個變量對象。對來說,會將指定的對象添加到作用域鏈中。 1. 基本類型和引用類型的值 JavaScript變量可以用來保存兩種類型的值:基本類性值和引用類性值。基本類型值源自以下5種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String。基本...
摘要:注意由于閉包會額外的附帶函數(shù)的作用域內(nèi)部匿名函數(shù)攜帶外部函數(shù)的作用域,因此,閉包會比其它函數(shù)多占用些內(nèi)存空間,過度的使用可能會導(dǎo)致內(nèi)存占用的增加。 作用域和作用域鏈?zhǔn)莏avascript中非常重要的特性,對于他們的理解直接關(guān)系到對于整個javascript體系的理解,而閉包又是對作用域的延伸,也是在實際開發(fā)中經(jīng)常使用的一個特性,實際上,不僅僅是javascript,在很多語言中都...
摘要:變量作用域和內(nèi)存問題基本類型和引用類型的值基本類型就是簡單的數(shù)據(jù)段種值類型,而引用類型就是對象操控對象的引用。但是不但能訪問自己的變量,也能訪問和全局作用域下的變量。延長作用域鏈相當(dāng)于創(chuàng)造了一個新的變量對象在當(dāng)前作用域的上方。 變量作用域和內(nèi)存問題 1.基本類型和引用類型的值 基本類型就是簡單的數(shù)據(jù)段(5種值類型),而引用類型就是對象(操控對象的引用)。 1.1復(fù)制變量值 引用類型實際...
閱讀 982·2021-11-22 09:34
閱讀 2166·2021-11-11 16:54
閱讀 2202·2021-09-27 14:00
閱讀 946·2019-08-30 15:55
閱讀 1534·2019-08-29 12:46
閱讀 605·2019-08-26 18:42
閱讀 645·2019-08-26 13:31
閱讀 3189·2019-08-26 11:52