js之作用域

来源:https://www.cnblogs.com/jjq-exchange/archive/2018/10/28/9865974.html
-Advertisement-
Play Games

1.什麼是作用域 作用域是用於收集存儲維護變數,以及當前執行代碼聲明的變數所擁有的許可權, 例如 : function foo(a){ console.log(a); 1 }; foo(666); console.log(a); 2 此時執行該段代碼 1 -- 處列印我們得到 666 因為在函數中聲明 ...


  1.什麼是作用域

  作用域是用於收集存儲維護變數,以及當前執行代碼聲明的變數所擁有的許可權,

   例如 : 

      function foo(a){

        console.log(a); --------    1   

      };

      foo(666);

      console.log(a); -------   2   

    

    此時執行該段代碼  

     1  -- 處列印我們得到   666  因為在函數中聲明瞭 a 參數  且執行foo函數像裡面傳入666就相當於將a賦值為666  所以console.log  查詢a可以獲得666

     2  --處列印我們獲取一個報錯 Uncaught ReferenceError: a is not defined  說a沒有定義,這是為什麼呢.

     2.1 首先我們來說明下LHS 查詢和RHS查詢(書上給的解釋是: 賦值操作的左側或右側)

        我的理解是

          LHS  ---  被賦值的變數

          RHS ---  查詢變數的值

        且這兩種查詢都是從本身所在作用域向上冒泡查詢直到遇到定義的變數位置,

        不同的是 :

          1.RHS 在本作用域查詢變數遇到不存在需要查詢的變數則逐級向上一級作用域查詢,查到則停止,否則直到到window作用域還沒有查到則會返回一個 xxx  is not defined

          2.LHS 在本作用域查詢變數遇到不存在需要查詢的變數則逐級向上一級作用域查詢,查到則停止, 到window作用域還沒有查到則會預設再window 全局變數處偷偷的創建這個需要查詢的變數

    下麵用一段簡單的代碼來說明 LHS 和 RHS

      function foo1(a){

        console.log(g) 

          //這裡將會出現報錯  g is not defined   因為這裡執行的RHS查詢 ,在查詢g的時候發現foo作用域沒有,所以向他的上一級window對象內查詢也沒有存在,所以返回not defined

        console.log(a+g); 

        g =  a;

      }

      foo1(666);

        

      

      function foo2(a){

        g =  a;

        //在FOO2函數中 a向g賦值  此時g在foo2作用域中也不存在,他也向上查詢,遇到window對象,發現其中也沒有定義g 變數,但是此時呢他就在window對象中創建了一個g對象,所以window對象中就有這個變數

        console.log(a+g);   -----   列印控制台獲得 4 

      }

      foo2(2);

    //如果將foo2中 g = a 換成  a = g 會怎樣呢  --- 大家可以試試哦  

 


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

-Advertisement-
Play Games
更多相關文章
  • 看完一整本書,結果寫不出什麼東西,按書上教程來,基本能把例子完成個七七八八,可是用padding還是margin完全整不清……,而且只要結構一複雜,元素就各種不受控制。 沒辦法 找來韓順平老師的視頻(沒錯,就是在網上不知道怎麼搞來的) 看完老師講完整個html&CSS部分2,終於把這個內容吃透了。 ...
  • Vue.js 的源碼都是在src 目錄下,其目錄結構如下。 1.compiler 目錄包含Vue.js 所有編譯相關的代碼。它包括把所有模板解析成ast 語法樹, ast 語法樹優化等功能。 2.core 目錄 包含了Vue.js 的核心代碼,包括內置組件,全局API封裝,Vue 實例化,觀察者,虛 ...
  • 上一篇博客我向大家介紹了基於ko-easyui實現的開發模板,博客地址:https://www.cnblogs.com/cqhaibin/p/9825465.html#4095185。但在還遺留三個問題。本篇幅文章就以解決這三問題展開。 一、代理 前後端分離的開發模式,一定會存在前端開發工程,與後端 ...
  • 用node搞web服務和直接用tomcat、Apache做伺服器不太一樣, 很多工作都需要自己做。緩存策略也要自己選擇,雖然有像koa-static,express.static這些東西可以用來管理靜態資源,但是為了開發或配置時更加得心應手,知其所以然,有瞭解http緩存的必要。另外,http緩存作... ...
  • JavaScript提供定時執行代碼的功能,叫做定時器(timer),主要由setTimeout()和setInterval()這兩個函數來完成。它們向任務隊列添加定時任務。初始接觸它的人都覺得好簡單,實際上真的如此麽?這裡記載下,一路對其使用姿勢變遷的歷程。 setTimeout()基礎 setT ...
  • 今天使用vue 過濾器中發現一個小坑,網上查到的大都是不正確的解決方法,故分享給大家: 原錯誤代碼: 報錯: 正確代碼: 發現啥錯沒?沒錯就是filters, 註意是有s的,沒s它也不會報語法錯誤,只會再控制台輸出 過濾器解析錯誤,所以這些小坑還是很容易踩到的。 ...
  • 作者:houyanhua1 鏈接:https://blog.csdn.net/houyanhua1/article/details/79443987 來源:CSDN ...
  • 字元串對象 字元串對象是JavaScript中比較常見的一種基本數據類型,他封裝了一個字元串,並且提供了相應的方法。例如連接字元串、取字元串、分割字元串等。JavaScript中字元串是不可變的,原始的字元串值不可修改。 1.創建字元串 創建字元串有多種方法,可以使用字面值定義字元串。例如; var ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...