關於JS變數和作用域

来源:http://www.cnblogs.com/pacyx/archive/2016/07/27/5713051.html
-Advertisement-
Play Games

ECMAScript 變數:1.基本類型值(簡單數據段) 2.引用類型值(可能由過個值構成的對象) → 保存在記憶體中的對象 動態屬性: 只能給引用型值動態添加新屬性,以便將來使用。 複製變數值 : 基本類型值的複製 → 在變數對象上創建一個新值 → 複製給新變數(互不影響) 引用類型值的複製 → 將 ...


ECMAScript 變數:1.基本類型值(簡單數據段)

                          2.引用類型值(可能由過個值構成的對象) → 保存在記憶體中的對象


 

動態屬性: 只能給引用型值動態添加新屬性,以便將來使用。


複製變數值 :

基本類型值的複製 → 在變數對象上創建一個新值 → 複製給新變數(互不影響)

引用類型值的複製 → 將存儲在變數對象中的值複製到新變數分配空間中(複製的是一個指針,指向同一個對象,相互影響)


 

傳遞參數:

ECMAScript中所有函數的參數都是按值傳遞 。

(函數外部的值複製給函數內部的參數。

 → 可以把ECMA函數的參數想象成局部變數。)

 

原因解釋:

說法一:

函數參數是一種局部變數,在外部值傳遞給函數參數,內部外部互不影,引用傳遞複製的是地址,所以他內務外部相互有影響。

說法二:對象角度(參數是一個對象 obj)

對象按值傳遞 → 參數對象和外部對象引用同一個對象 → 外部對象指向的對象在堆記憶體中只有一個,且是全局變數。

不要錯認為是在局部作用在修改的對象在全局作用域(外部)反映出來的結果 → 函數內部的局部變數在函數執行完會立即銷毀。

 


 

執行環境(有時候也簡稱“環境”)及作用域

 

執行環境定義了白嬢或函數有權訪問其他數據決定了他們各自的行為 → 每個執行環境都有一個與之關聯的變數對象 → 環境中定義的所有變數和函數都保存在這個對象。


 

每個函數都有自己的執行環境 → 當執行流進入一個函數時 → 函數環境會被推入一個環境棧中 → 在函數執行後將其彈出 → 把控制權返回給之前的執行環境

 

代碼在一個環境執行中時,會創建變數對象的一個作用域鏈(scope chain) 

作用域鏈用途:保證對執行環境有權訪問的所有變數和函數的有序訪問。

作用域鏈的前端,始終都是當前執行的代碼所在環境的變數對象


 

內部環境可以通過作用域鏈所有的外部環境,但是外部環境不能訪問內部環境(環境的聯繫是線性的,有次序的 → 向上搜索作用域鏈以查詢變數和函數名)

 

函數參數也被當做變數來對待


延長作用域鏈:

有些語句可以在作用域的前端鏈臨時增加一個變數(變數在代碼執行後移除)

1.try-catch語句的catch塊

2.with語句


 

 

Javas沒有塊級作用域

這裡可以再簡單區分一下塊級作用域和函數作用域

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第61條解釋了非同步API怎樣幫助我們防止一段程式阻塞應用程式的事件隊列。使用下麵代碼,可以很容易使一個應用程式陷入泥潭。while(true){} 而且它並不需要一個無限迴圈來寫一個緩慢的程式。代碼需要時間來運行,而低效的演算法或數據結構可能導致運行長時間的計算。效率不是js唯一關註的。基於事件的編程... ...
  • 最近在看阮一峰的《ES6標準入門》,在字元串擴展一節中有提到幾個新的擴展,覺得挺有意思,想在ES3裡面使用,於是就有下麵的相容性寫法。 repeat 將一個字元串重覆n次 startsWith 判斷字元串是否以某個字元串開頭,返回bool值 endsWith 判斷字元串是否以某個字元串結尾,返回bo ...
  • 說到詭異事件發生的原因,自然是想到兩者之間的差異性。 首先是效果: jquery中有fadeIn和fadeOut兩個效果,用來實現漸隱漸顯的效果,這個在PC端自然是常用的效果。然後我們前端組的組員Mr Huang自然是想到手機頁面也可以更加炫麗,於是加上了登錄框的漸隱效果。給用戶緩衝的效果不錯。 但 ...
  • 1、jQuery的基本概念 1.1、什麼是jQuery js的方法庫,封裝了很多js的方法,需要的時候可以直接調用 1.2、使用jQuery的三個步驟 js:當頁面所有元素包括圖片,樣式文件,等所有資源都載入完才開始執行; jQuery:當頁面的文檔樹載入完成後就會執行,並不會等所有的文件都載入完成 ...
  • 一、前言 如果將前端比喻成一人,那麼Html就是這個人的骨骼脈絡,CSS則是這個人的身上的裝飾,JavaScript則是這個人的行為。作為一種腳本語言JavasSript具有著弱類型等特點。(在這裡我們要有一個明顯的認識JavasSript和Java是完全不同的兩種語言,他們之前一毛錢關係都沒有。之 ...
  • JavaScript第一天 1.前端三層 HTML 結構層 語義 骨架 css 表現層 審美 衣服 JavsScript 行為層 行為交互 動作 2.轉義字元\r\n\t \r return 回車符 \n new line 換行符 console.log可用 \t 製表符 \ 轉義字元 3.進位 0 ...
  • 如果元素有屬性 'position:absolute',containing block 由最近的 position 不是 static 的祖先建立,按下麵的步驟: 1、如果祖先是塊級元素,containing block 由祖先的 padding edge(除 margin, border 外的區 ...
  • 演示地址:http://admintemplate.webplus.org.cn/ v1.0 (2016/7/27) 扁平化風格 全屏支持 後臺管理不使用iframe,全ajax開發 許可權管理 商品管理 整合ckeditor及ckfinder 集成highcharts圖表插件 任何地方實現文件的上傳 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...