摘要:在操作對象時,實際上是在操作對象的引用而不是實際的對象。任一變量值操作互不影響。訪問變量有按值和按引用兩種方式,而參數只能按值傳遞。基本類型參數傳遞傳給函數的是數值的一個復制,函數中對其的修改外部不可見。
?? ECMAScript 變量可能包含兩種不同數據類型的值:基本類型值和引用類型值。 基本類型值指的是簡單的數據段,而引用類型值指那些可能由多個值構成的對象。
??5 種基本數據類型: Undefined、 Null、 Boolean、 Number 和 String。這 5 種基本數據類型是按值訪問的,因為可以操作保存在變量中的實際的值。ES6有多出一種Symbol類型。
訪問變量??引用類型的值是保存在內存中的對象,JavaScript 不允許直接訪問內存中的位置,也就是說不能直接操作對象的內存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。為此,引用類型的值是按引用訪問的。
復制變量值【復制變量值】復制基本類型變量的值,會在該變量對象上創建一個新值,然后把該值復制到新變量分配的位置上。任一變量值操作互不影響。
【復制引用指針】復制引用類型變量的值,同樣會將存儲在變量對象中的值復制一份放到新變量分配的空間中,不同的是這個值的副本實際上一個指針,而這個指針指向存儲在堆中的一個對象。復制后,兩個變量實際上將引用同一個對象。因此,改變任意變量,都會影響另一個變量。
參數傳遞??ECMAScript 中所有函數的參數都是按值傳遞的。訪問變量有按值和按引用兩種方式,而參數只能按值傳遞。
??
基本類型參數傳遞:傳給函數的是數值的一個復制,函數中對其的修改外部不可見。
var a = 1; var b = 2; function change(a, b) { var c = a; a = b; b = c; console.log(a); //2 console.log(b); //1 } change(a, b); console.log(a); //1 console.log(b); //2
引用類型參數傳遞:傳給函數的是數值的一個引用,函數中對其屬性的修改外部可見,但用新引用覆蓋其則在外部不可見
var a = [1, 2, 3]; var b = [5, 6]; function change(a,b) { a[0] = 4; //對其屬性的修改外部可見 var c = a; a = b; //用新引用覆蓋 b = c; console.log(a); //"5,6" console.log(b); //"4,2,3" } change(a,b); console.log(a); //"4,2,3" console.log(b); //"5,6"
??a,b是change函數中的變量,在調用函數時傳遞了a,b的引用賦給了這兩個變量,但是并不能改變全局中的a,b。因為用新引用覆蓋在外部不可見,因為函數只是拿到了引用 并沒有權力更改引用。
var a = [1, 2, 3]; var b = [5, 6]; function change() { var c = a; a[0] = 4; //對其屬性的修改外部可見 a = b; //用新引用覆蓋 b = c; } change(a,b); console.log(a); //"5,6" console.log(b); //"4,2,3"
??因為js沒有塊級作用域,所以它在change里找不到變量a,b就會自覺的到上層去找,所以這里的a,b是全局變量的引用。
???深究JavaScript系列???
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89325.html
摘要:構造器的目的是要創建一個新對象并對其進行設置,然后將其作為構造器的返回值進行返回,是通過函數調用初始化創建新對象。或方法進行調用通過或調用函數,被調用的函數的指向第一個參數指向的。 this ??JavaScript的this總是指向一個對象,而這個對象是基于函數運行時動態綁定的,并非函數聲明時綁定。 函數調用方式 作為對象的方法調用 作為普通函數進行調用 作為構造器進行調用 通過a...
摘要:表達式沒有返回值,因此返回結果是。并不改變表達式的結果,只要讓表達式不返回值按慣例我們用來獲得這主要源自語言,當然使用或其他表達式也是可以的。不是數字的數字如果數學運算的操作數不是數字類型,就無法返回一個有效的數字,這種情況下返回值為。 這里的內容是讀書筆記,僅供自己學習所用,有欠缺的地方歡迎留言提示。 第一部分 類型和語法 第1章 類型ECMAScript語言類型包括Undefin...
摘要:所謂數組英語,是有序的元素序列。組成數組的各個變量稱為數組的分量,也稱為數組的元素,有時也稱為下標變量。在棧中添加數據和刪除數據也被稱為推入和彈出,而且推入和彈出只會發生在棧的頂部。棧是一種數據結構,而隊列則是一種的數據結構,即先進先出。 所謂數組(英語:Array),是有序的元素序列。 若將有限個類型相同的變量的集合命名,那么這個名稱為數組名。 組成數組的各個變量稱為數組的分量,也稱...
摘要:一系列活動的執行上下文從邏輯上形成一個棧。堆棧中的上下文就會被依次執行并且彈出堆棧,直到回到全局的上下文。確定上下文中的指向對象確定指向或當前對象。 定義 執行上下文(也稱執行環境execution context)(簡稱:EC)是個抽象的概念,是在函數被調用時,但是在函數體被真正執行以前所創建的。每個執行上下文都有一個變量對象(variable object),保存著當前環境中所有的...
摘要:是構造函數的屬性,而不是實例對象的屬性,指向原型對象。這個連接存在于實例與構造函數的原型對象而不是構造函數之間,也就是說實例對象與構造函數沒有直接關系。 prototype、constructor、__proto__ ??prototype是站在構造函數的角度討論原型對象的,用來實現基于原型的繼承與屬性的共享。__proto__是站在實例對象的角度討論原型對象,構成原型鏈,同樣用于實現...
閱讀 2879·2021-11-16 11:55
閱讀 2629·2021-09-29 09:34
閱讀 3448·2021-09-01 14:21
閱讀 3783·2019-08-29 12:36
閱讀 708·2019-08-26 10:55
閱讀 4002·2019-08-26 10:20
閱讀 1039·2019-08-23 18:19
閱讀 1206·2019-08-23 17:56