作用域和閉包(五)常見面試題
1. 說一下對變數提升的理解
分為變數定義和函式宣告(和函式表示式的區別)
全域性作用域和函式作用域或者是塊級作用域(ES6)中,變數宣告(var)和函式宣告會被提升到作用域頂部,
而函式表示式不會,只是當做一個var變數提升,函式沒有被提升,另外ES6 中 let 和 const識別符號定義的變數
也不會發生提升(臨時性死區TDZ)
2. this幾種不同的使用場景
作為建構函式
作為物件屬性
作為普通函式
call,bind,apply
箭頭函式中(ES6)
3. 建立10個<a>標籤,點選彈出對應序號
使用IIFE,每次都建立一個獨立的函式,傳入不同的i
或者ES6 let 迴圈
4. 如何理解作用域
(1)自由變數: 在當前作用域沒有被定義的變數
(2)若在當前作用域找不到,則往父級作用域查詢,自由變數的查詢,父級作用域:函式定義時所在的上下文
(3)閉包兩個場景,作為引數傳入和函式返回值
5. 實際開發中閉包應用
// 用於封裝變數,收斂許可權
只有通過返回函式能對_list陣列操作,外部不可見
相關推薦
作用域和閉包(五)常見面試題
1. 說一下對變數提升的理解 分為變數定義和函式宣告(和函式表示式的區別) 全域性作用域和函式作用域或者是塊級作用域(ES6)中,變數宣告(var)和函式宣告會被提升到作用域頂部, 而函式表示式不會,只是當做一個var變數提升,函式沒有被提升,另外ES6 中 let 和 const識別符號定
作用域和閉包(三)作用域和作用域鏈
col ext alt image 查找 str color 定義 style 1. JS無塊級作用域, 只有全局作用域和函數作用域 (ES6之前),但可以模仿塊級作用域(使用IIFE) 函數的父級作用域則是函數定義時所在的上下文, 查找某變量時,當前作用域沒有,則
作用域和閉包(四)閉包
閉包: 定義在函式裡面的函式 為什麼不是輸出200,回到上節作用域鏈的問題,在返回函式中沒有a,a為自由變數 則往父級作用域查詢a,此處注意 父級作用域是函式定義時所在上下文,而不是執行時所在上下文, 所以找F1中定義的a 1. 閉包使用場景 (1)函式作為返回值,如上圖 (2)函
作用域和閉包(一)上下文和提升
上下文: 一段script 或者函式 全域性作用域: 一段script中 函式作用域: 函式中 變數提升 JS 引擎在解析js指令碼時,進入全域性作用域,首先提取變數宣告和函式宣告, 函式宣告在變數宣告之前, 提取到頂部 函式作用域解析過程(執行之前): 提取變數宣告,函式宣告,th
javasrcipt的作用域和閉包(一)
一、作用域是什麼? 幾乎所有的程式語言最基本的功能之一,就是能夠儲存變數的值,並且能訪問和修改這些值。 修改變數值的過程我們通常在程式執行時,稱為改變一個物件的狀態。有了狀態,讓程式變得有非常有趣。 然而,這些變數存在哪裡?程式又是如何找到它們的? 這些問題就說明需要一套設計良好的規則來儲存變數,並且
javasrcipt的作用域和閉包(二)
這篇部落格主要對詞法作用域與欺騙詞法作用域、函式作用域與塊級作用域、函式內部的變數提成原理進行詳細的分析,在這篇部落格之前,關於作用域、編譯原理、瀏覽器引擎的原理及關係在javaScript的作用域和閉包(一)有詳細的闡述,而今天這篇部落格是在其基礎上對作用域的工作原理進行深入的分析,所有如果有對編譯和引
javasrcipt的作用域和閉包(二)續篇之:函式內部提升機制與Variable Object
一個先有雞還是先有蛋的問題,先看一段程式碼: a = 2; var a; console.log(a); 通常我們都說JavaScript程式碼是由上到下一行一行執行,但實際這段程式碼輸出的結果是2。但這段程式碼並不能為我們要討論的問題提供完整的參考意義,所以再看一下程式碼: conso
YDKJS 作用域和閉包(四)變量提升
console 代碼塊 tro 執行 回憶一下 div 它的 引擎 賦值語句 先有雞還是先有蛋? 如下代碼: a = 2; var a; console.log( a ); 很多開發者可能會認為結果會輸出 undefined,因為 var a 在 a = 2 後
作用域和閉包(一)
作用域和閉包(一) 一、作用域是什麼? 1、概念:設計好一套規則來儲存變數,並且之後可以方便找到這些變數。(並且之後對這個值可以進行訪問和修改。) 2、傳統編譯語言流程:程式中的原始碼在執行之前,會經歷以下三個步驟,統稱為“編譯”; (1)分詞/詞法分析。(這個·過程會將由字元組成的字串分解成(
計算機網路(五)常見面試題
1、session和cookie的區別 相同:都是用來跟蹤瀏覽器使用者身份的會話方式。 不同: (1)session是儲存在伺服器端,跟蹤使用者狀態,可儲存在叢集、資料庫、檔案等。Cookie是儲存在客戶端的,是session的一種實現方式。 (2)Cookie不是很安全,
JS(作用域和閉包)
win argument cal bsp log AR 點擊 表達式 一個 1.對變量提升的理解 2.說明 this 幾種不同的使用場景 3.創建10個 <a>標簽,點擊的時候彈出來對應的序號 4.如何理解作用域 5.實際開發中閉包的應用 一、執
深入理解javascript原型和閉包(14)——從【自由變數】到【作用域鏈】
https://www.cnblogs.com/wangfupeng1988/p/3994065.html 重點: var x = 10; function fn(){ console.log(x); } function show(f){ var x = 20; f();
【學習筆記】深入理解js原型和閉包(12)——簡介【作用域】
提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫程式碼的時候,不要在“塊”裡面宣告變數,要在程式碼的一開始就宣告好了。以避免發生歧義。如: &nbs
【學習筆記】深入理解js原型和閉包(18)——補充:上下文環境和作用域的關係
本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。 再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。 00 上下文環境: 可以理解為一個看不見摸不著的物件(有若干個屬性),雖然看不見
【 js 基礎 】作用域和閉包
代碼 var 垃圾回收器 間接 undefined scrip 運行時 例子 解析 一、編譯過程 常見編譯性語言,在程序代碼執行之前會經歷三個步驟,稱為編譯。 步驟一:分詞或者詞法分析 將由字符組成的字符串分解成有意義的代碼塊,這些代碼塊被稱為詞法單元。 例子: v
js——作用域和閉包
如果 分布式系統 ren 移植 font 寫代碼 一次 運行時 屏蔽 1. js是編譯語言,但是它不是提前編譯,編譯結果不能在分布式系統中移植。大部分情況下,js的編譯發生在代碼執行前的幾微秒(甚至更短) 2. 一般的編譯步驟 分詞/詞法分析:把字符串分解成詞法單元
python的namespace和閉包(closure)
引用 能夠 繼續 local 沒有 都是 自由 不存在 logs 在討論閉包之前,先總結一下python的命名空間namespace,一般的語言都是通過namespace來識別名字標識,無論是變量,對象,函數等等。python劃分3個名字空間層次,local:局部,標識為當
深入理解javascript原型和閉包(轉)
原型鏈 面向 type www. 作用域 url tle das 經歷 深入理解javascript原型和閉包(完結) 說明: 該教程繞開了javascript的一些基本的語法知識,直接講解javascript中最難理解的兩個部分,也是和其他主流面向對
js面試題知識點全解(一作用域和閉包)
foo true 方式 聲明 提升 function 這樣的 all 變量提升 問題: 1.說一下對變量提升的理解 2.說明this幾種不同的使用場景 3.如何理解作用域 4.實際開發中閉包的應用 知識點: js沒有塊級作用域只有函數和全局作用域,如下代碼: if(tru
JavaScript作用域和閉包
頁面加載 場景 函數作為參數 str 應用 情況 定義 undefine 現在 在本文中,筆者將用通俗的語言和簡單的代碼,介紹以下幾種概念: 變量提升 this的使用場景 作用域 閉包的應用 最後還有一個例題 變量提升 首先我們要知道,js的執行順序是由上到下的,但這個