ECMAScript變數訪問與傳遞引數

2021-10-19 09:58:20 字數 1760 閱讀 2033

ecmascript變數包含兩種不同的型別的資料原始值引用值

原始值就是最簡單的資料(undefined,null,boolean,number,string,symbol)。

引用值是由多個值構成的物件(object)。

儲存原始值的變數是按值訪問的,因為我們操作的就是儲存在變數中的實際值。

引用值是儲存在記憶體中的物件,與其它的語言不相同的是,js不允許直接訪問記憶體位置,因此也就不能直接操作物件所在的記憶體空間。在操作物件的時候,實際操作的是對該物件的引用而非實際的物件本身。因此,儲存引用值的變數是按引用訪問的。

ecmascript中所有的函式的引數都是按值傳遞的。這就意味著函式外的值會被複製到函式內部的引數中,就如同乙個變數複製到另乙個變數中一樣。

來乙個demo:

function

demo

( number )

let count =20;

let result =

demo

( count )

;//函式內部將操作完之後的值返回,用result接收

//如果說變數是按引用傳遞,則count的值就不會是20,而是進過number += 10之後成為30;

console.

log( count )

;//20

console.

log( result )

;//30

接下來建立乙個物件:

function

setstudent

( object )

let student =

newobject()

;setstudent

( student )

; console.

log( student.score )

;//輸出:100

/* 不是所有的函式的形參都是按值傳遞的嗎?怎麼這裡好像是按引用傳遞的了?

這是因為在函式的內部,student和object都指向同乙個物件,及時物件是按值傳入函式的,

object也會通過引用訪問物件。當函式內部給object增添了score屬性,函式外部的物件也會

反映這個變化,因為object指向的物件儲存在全域性作用域的堆記憶體上。

*/

接下來乙個案列,你就會清楚其中的門道了。

function

setstudent

( object )

let student =

newobject()

;setstudent

( student )

; console.

log( student.score )

;// 100;

/* why ? ? ? ?

當引數object傳入setstudent()時,score屬性被設定為100,然後變數object被設定為新物件,

且score屬性為99,如過student是按引用傳遞的,那麼student應該將指標改為指向score屬性為

99的物件,但是score的值任然是100;其中object = new object()所產生的物件在

函式結束的時候就被銷毀了。

*/

ECMAScript中變數的解構賦值

ecmascript中變數的解構賦值 es6 允許從陣列和物件中提取值,對變數進行賦值。解構賦值的基本用法 1 陣列的解構賦值 let a,b,c 1,2,3 console.log a 1 console.log b 2 console.log c 3 2 物件的解構賦值 let console....

ECMA Script 6 變數的解構賦值

1 陣列的結構和賦值 es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 2 物件等可以這麼賦值 3 函式引數的解構賦值 function add x,y add 1,2 3 基本用途 交換變數 a,b b,a 函式返回多個值 類似於陣列 返回乙個陣列 function e...

ECMAScript6 2 變數的解構賦值

1 對陣列變數賦值 let foo,bar baz 1,2 3 foo 1 bar 2 baz 3 let third1 foo bar baz third1 baz let aa,bb 1,2,3 aa 1 bb 3 let head,tail 1,2,3,4 head 1 tail 2,3,4 ...