1. 程式人生 > >你不知道的JS-讀書筆記(一)--作用域

你不知道的JS-讀書筆記(一)--作用域

作用域中的 LHS,RHS 查詢

var a = 2;

  • 引擎對a的查詢是LHS查詢,指查詢a的記憶體位置,並非查詢其真實的值

console.log(a)

  • 引擎對a的查詢是RHS查詢,指查詢a的實際值,並傳遞給console.log()方法作為引數
function foo (a) {
  console.log(a);
}

foo(2);
  • foo進行RHS查詢,並進行方法呼叫
  • 隱式對a進行賦值:a=2,對a進行LHS查詢
  • console.log進行RHS查詢
  • console.log(a)中的a進行RHS查詢

如果 RHS 查詢找到了一個變數,但是你嘗試對這個變數的值進行不合理的操作,比如試圖對一個非函式型別的值進行函式呼叫,或著引用 null

undefined 型別的值中的屬性,那麼引擎會丟擲另外一種型別的異常,叫作 TypeError。

ReferenceError 同作用域判別失敗相關,而 TypeError 則代表作用域判別成功了,但是對結果的操作是非法或不合理的。

不成功的 RHS 引用會導致丟擲 ReferenceError 異常。
不成功的 LHS 引用會導致自動隱式地建立一個全域性變數(非嚴格模式下), 該變數使用 LHS 引用的目標作為識別符號, 或者丟擲 ReferenceError 異常(嚴格模式下)。

詞法作用域

function foo (a) {
  var
b = a * 2; function bar (c) { console.log(a, b, c); } bar(b * 3); } foo(2); // 2, 4, 13
  • 共三層作用域
  • 最外層為全域性作用域,含有一個識別符號:foo
  • 第二層為foo函式作用域,含有三個識別符號:a, b, bar
  • 第三層為bar函式作用域,含有一個識別符號:c
  • 查詢某個識別符號的值(RHS查詢)時,先在當前作用域查詢,查不到依次向外層查詢,直到全域性作用域停止

動態修改詞法作用域:eval,with

均不建議使用,eval可以修改已經存在的詞法作用域,with建立了一個新的詞法作用域

副作用:
- 引擎無法在編譯時對作用域查詢進行優化,導致程式碼執行變慢。

立即執行函式表示式-IIFE

var a = 2;

(function foo() {

  var a = 3;
  console.log( a ); // 3

})();

console.log( a ); // 2

第一個()將函式變成表示式,第二個()執行這個函式

塊作用域 let,const

if (true) {
  let bar = 2;
}
console.log( bar ); // ReferenceError

提升

變數提升

a = 2;
var a;
console.log(a); // 2

// 等同於------

var a;
a = 2;
console.log(a);
console.log(a); // undefined 並非 ReferenceError 異常
var a = 2;

// 等同於------

var a;
console.log(a);
a = 2;

函式宣告提升 到 變數提升 前邊

foo(); // 1

var foo;

function foo () {
  console.log(1);
}

foo = function () {
  console.log(2);
}

// 等同於------

function foo () {
  console.log(1);
}

var foo; // 重複宣告,被忽略

foo();

foo = function () {
  console.log(2);
}

相關推薦

知道JS-讀書筆記--作用

作用域中的 LHS,RHS 查詢 var a = 2; 引擎對a的查詢是LHS查詢,指查詢a的記憶體位置,並非查詢其真實的值 console.log(a) 引擎對a的查詢是RHS查詢,指查詢a的實際值,並傳遞給console.log()方法作為引數

知道的 Virtual DOM:Virtual Dom 介紹

前言 目前最流行的兩大前端框架,React和Vue,都不約而同的藉助Virtual DOM技術提高頁面的渲染效率。那麼,什麼是Virtual DOM?它是通過什麼方式去提升頁面渲染效率的呢?本系列文章會詳細講解Virtual DOM的建立過程,並實現一個簡單的Diff演

AngularJs 學習筆記作用

oot scrip angularjs col 層級 綁定 javascrip 指令 pan AngularJs采用了註重時效的MVC方式,是基於MVW模式。 1.$scope和作用域的概念。 AngularJs中的$scope對象是模板的域模型,也稱作作用域實例,通過為其

知道的JavaScript讀書筆記

第一章 1、內建型別 JavaScript有七種內建型別【除了物件以外,其他統稱為“基本型別”】: 空值(null) 未定義(undefined) 布林值(boolean) 數字(number) 字元竄(string) 物件(object) 符號(symbol,ES6新增的

讀書筆記知道的JavaScript上卷》1.5作用閉包

5.1 閉包的概念 閉包:當函式可以記住並訪問所在的詞法作用域時,就產生了閉包,即使函式是在當前詞法作用域之外執行。 這是閉包的定義,對於一個作用域(就比如函式所形成的作用域)來說,通常情況下,當執行完這個函式以後,JS引擎的垃圾回收機制就可能會回收掉這個函式所佔用

讀書筆記知道的JavaScript上卷》1.1作用是什麼

作用域是什麼 JavaScript是一門非常神奇的程式語言,以至於你沒有掌握它的精髓都可以寫出完整的專案,本套讀書筆記記錄的就是《你不知道的JavaScript上卷》中的內容,其中會夾雜這我個人對某些知識點的感悟與見解。 1.1 編譯器與引擎 在討論作用域是什麼的時候不

不可不知的人性》劉墉 讀書筆記

2017年,重拾閱讀後讀完的第一本書。由於腦容量太小,故此寫下讀書筆記。 此書是在潘家園,兩塊錢淘來的。九州圖書出版社1999年一版一印。略有脫頁。分十章,共十萬字。每章以小故事為引,之後以故事為例,對人性的正反兩方進行剖析。全文整體上來說,稍微有一些辨證思維的感覺。教育不

《代碼閱讀》讀書筆記

需求 的人 一行 編碼 重要 流動 使用 分析 缺少 《代碼閱讀》讀書筆記(一) 《代碼閱讀》(《Code Reading The Open Source Perspective》)Diomidis Spinellis 著 ---------------------

SICP讀書筆記

自由 運用 實參 隱藏 更多 定義 並不是 謂詞 精確 第一章 構造過程抽象 計算過程是存在於計算機裏的一類抽象事物,它在演化過程中會去操作一些被稱為數據的抽象事物。我們通過創建被稱為程序的規則模式來指導這類過程的進行。程序由程序設計語言編排而成。 我們將要使用Lisp

崔華基於oracle的SQL優化讀書筆記如何得到真實的執行計劃

hash mes getting binary oracl only 中文 fun roc ---恢復內容開始--- 得到目標SQL的執行計劃,大致有以下四種方式: 1.explain plan 命令 2.DBMS_XPLAN包 3.SQLPLUS中的autotrace開關

《可愛的Python》讀書筆記

可愛的Python 閏年 素數 質數 Just use it! don't learn!——只用,不學!無意間了解到《可愛的Python》就被它的名字所吸引。查了書評得知這本書是有爭議的,有人覺得書中很多都是點到為止不適合新手入門,處處給讀者挖坑,結構混亂更不能作為參考書。有人認為此書

《Python網絡數據采集》讀書筆記

urllib BeautifulSoup 思考“網絡爬蟲”時通常的想法:? 通過網站域名獲取 HTML 數據? 根據目標信息解析數據? 存儲目標信息? 如果有必要,移動到另一個網頁重復這個過程當網絡瀏覽器遇到一個標簽時,比如<img src="cuteKitten.jpg"&

《用戶網絡行為畫像》讀書筆記

感覺 數據結構 定性 角度 筆記 穩定性 包括 習慣 收藏 推薦就是發掘用戶集合和對象集合的語義關系,為用戶提供語義最相關的 TOP-N 對象集合。 語義關系就是能讀懂用戶偏好興趣的核心。 推薦系統是面向具體業務的交叉研究,無業務講推薦系統,感覺言之無物;從技術來講,不同的

《編碼-隱匿在計算機背後的語言》 —— 讀書筆記:編碼

分享圖片 信號 組合 大小寫 不變 缺點 改變 有著 書寫 1. 至親密友 1) 什麽是編碼?編碼是一種用來在機器與人之間傳遞信息的方式,編碼就是交流。 2)莫爾斯電碼,只有點和劃(國際求救信號:SOS ...---...),缺點是不區分大小寫。

《軟件測試方法和技術》-讀書筆記

圖片 軟件工程 AI 開發 支持 ont 3年 發的 一次 軟件測試正反兩方面的爭辯 軟件測試領域先驅 Bill Hetzel 博士 1993年在美國的北卡羅來納大學組織了歷史上第一次正式的關於軟件測試的會議。從此以後,軟件測試開始頻繁出現在軟件工程的研究和實踐中,也可以認

《黑客與畫家》讀書筆記

能說 互聯 可能 研究 歷史 設計 職位 天下無敵 聯網 《黑客與畫家》讀書筆記(一) 黑客與畫家 黑客與畫家的共同之處,在於他們都是創作者,都試圖創作出優秀的作品。 他們本質上都不是在做研究,雖然過程中可能發現一些新技術。黑客的出發點是原創,最終得到一個優美的結果;科學家

深度探索C++對象模型讀書筆記

復雜 理解 image play 基礎上 isp 靜態 布局 bject 《深度探索C++對象模型》這本書也算是學習C++面向對象編程的必備書了,打算花上幾天先簡單的看一遍,這種書看上好幾遍也不一定能理解太多,慢慢積累一點一滴吃透就好。下面把我看書過程中覺得比較有意義的摘錄

《深入理解計算機系統》——讀書筆記

img 可執行 即將 簡單的 world std 加載 完整 .exe   這本書從一個簡單的C語言的HelloWorld程序講起...   這是這個小程序的生命周期的一個部分:   HellOWorld程序,從被創建(文本格式),到被執行(在屏幕上打印出來)。   其

遊戲人工智能 讀書筆記前言與介紹

style 簡單的 center 不同 可能性 傳統 lock 常見 symbol WeTest 導讀 自人工智能誕生之始,就和遊戲緊密的相結合在一起。因為人們通常認為,人類玩遊戲的過程是蘊含著人類的智能的。因此,當人們創造出一個能夠完成人類的某種遊戲的程序,我們認為這個程

C陷阱與缺陷讀書筆記

之間 之前 符號 雙引號 陷阱 數組 調用 筆記 如果 第一章 1.2 按位運算符:& 邏輯運算符:&& 1.3 單字符符號:只有一個字符長 多字符符號:含多個字符