關(guān)于JS變量和作用域詳解
ECMAScript 變量:
1.基本類型值(簡單數(shù)據(jù)段)
2.引用類型值(可能由過個值構(gòu)成的對象) → 保存在內(nèi)存中的對象
------
動態(tài)屬性: 只能給引用型值動態(tài)添加新屬性,以便將來使用。
------
復制變量值 :
基本類型值的復制 → 在變量對象上創(chuàng)建一個新值 → 復制給新變量(互不影響)
引用類型值的復制 → 將存儲在變量對象中的值復制到新變量分配空間中(復制的是一個指針,指向同一個對象,相互影響)
------
傳遞參數(shù):
ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞 。
(函數(shù)外部的值復制給函數(shù)內(nèi)部的參數(shù)。
→ 可以把ECMA函數(shù)的參數(shù)想象成局部變量。)
原因解釋:
說法一:
函數(shù)參數(shù)是一種局部變量,在外部值傳遞給函數(shù)參數(shù),內(nèi)部外部互不影,引用傳遞復制的是地址,所以他內(nèi)務(wù)外部相互有影響。
說法二:對象角度(參數(shù)是一個對象 obj)
------
對象按值傳遞 → 參數(shù)對象和外部對象引用同一個對象 → 外部對象指向的對象在堆內(nèi)存中只有一個,且是全局變量。
不要錯認為是在局部作用在修改的對象在全局作用域(外部)反映出來的結(jié)果 → 函數(shù)內(nèi)部的局部變量在函數(shù)執(zhí)行完會立即銷毀。
------
執(zhí)行環(huán)境(有時候也簡稱“環(huán)境”)及作用域
執(zhí)行環(huán)境定義了白嬢或函數(shù)有權(quán)訪問其他數(shù)據(jù)決定了他們各自的行為 → 每個執(zhí)行環(huán)境都有一個與之關(guān)聯(lián)的變量對象 → 環(huán)境中定義的所有變量和函數(shù)都保存在這個對象。
------
每個函數(shù)都有自己的執(zhí)行環(huán)境 → 當執(zhí)行流進入一個函數(shù)時 → 函數(shù)環(huán)境會被推入一個環(huán)境棧中 → 在函數(shù)執(zhí)行后將其彈出 → 把控制權(quán)返回給之前的執(zhí)行環(huán)境
代碼在一個環(huán)境執(zhí)行中時,會創(chuàng)建變量對象的一個作用域鏈(scope chain)
作用域鏈用途:保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。
作用域鏈的前端,始終都是當前執(zhí)行的代碼所在環(huán)境的變量對象
------
內(nèi)部環(huán)境可以通過作用域鏈所有的外部環(huán)境,但是外部環(huán)境不能訪問內(nèi)部環(huán)境(環(huán)境的聯(lián)系是線性的,有次序的 → 向上搜索作用域鏈以查詢變量和函數(shù)名)
函數(shù)參數(shù)也被當做變量來對待
------
延長作用域鏈:
有些語句可以在作用域的前端鏈臨時增加一個變量(變量在代碼執(zhí)行后移除)
1.try-catch語句的catch塊
2.with語句
------
Javas沒有塊級作用域
這里可以再簡單區(qū)分一下塊級作用域和函數(shù)作用域
以上這篇關(guān)于JS變量和作用域詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript中的動態(tài)?import()用法示例解析
這篇文章主要為大家介紹了JavaScript中的動態(tài)import()用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04webpack-url-loader 解決項目中圖片打包路徑問題
這篇文章主要介紹了webpack-url-loader 解決項目中圖片打包路徑問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02ES6中async函數(shù)與await表達式的基本用法舉例
async和await是我們進行Promise時的一個語法糖,async/await為了讓我們書寫代碼時更加流暢,增強了代碼的可讀性,下面這篇文章主要給大家介紹了關(guān)于ES6中async函數(shù)與await表達式的基本用法,需要的朋友可以參考下2022-07-07javascript 操作cookies及正確使用cookies的屬性
在 JS(JavaScript) 操作cookies比較復雜,在 ASP 里面我們只需要知道 cookie 的名稱、cookie 的值就行了,而 JS 里面,我們面對的是 cookie 的字符串,你自己編寫這個字符串寫入客戶端,然后自己解析這個字符串。2009-10-10javascript獲取和判斷瀏覽器窗口、屏幕、網(wǎng)頁的高度、寬度等
這篇文章主要介紹了javascript獲取和判斷瀏覽器窗口、屏幕、網(wǎng)頁的高度、寬度等,需要的朋友可以參考下2014-05-05