淺談作用域、變數提升、閉包與遞迴
前提:
1.函式想要執行,就必須知道自身變數以及自身變數所在作用域中的位置。
2.函式的執行取決於函式定義時所在的作用域,不取決於呼叫時的作用域。
3.函式在作用域鏈中的變數訪問遵循向上查詢。
(一)所謂作用域:變數的作用範圍。
1.在全域性宣告的變數具有全域性作用域。
2.在函式內宣告的變數具有區域性作用於。
(二)變數提升:在程式編譯階段,作用域內的變數會被提升到當前作用域的頂部,且宣告變數不賦值。
(三)閉包:函式儲存自身變數和所在作用域鏈的位置的現象。
(四)遞迴:函式呼叫自身的程式設計技巧。
死遞迴:
function foo(){ foo(); } foo();
前提:
a.遞迴規律
b.遞迴出口條件
c.遞迴的規律趨近於出口條件
var a = 5;
function fn(){
alert(a); //變數提升(也就是a=10提升到了fn最上面)且宣告變數不賦值,為undefined
var a = 10;
alert(a); //10
}
fn();
alert(a); //變數作用域 5
輸出結果:undefined 10 5
相關推薦
淺談作用域、變數提升、閉包與遞迴
前提: 1.函式想要執行,就必須知道自身變數以及自身變數所在作用域中的位置。 2.函式的執行取決於函式定義時所在的作用域,不取決於呼叫時的作用域。 3.函式在作用域鏈中的變數訪問遵循向上查詢。 (一)所謂作用域:變數的作用範圍。 1.在全域性宣告的變數具有全域性作用域。
js位置、如何定義、呼叫、變數提升、事件繼承、名稱空間、jquery外掛等等
js位置 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js程式碼位置</title> &
JavaScript變數作用域和變數提升
在看別人程式碼時,發現一個問題,就是一個未在上面宣告或者定義的變數,可以正常使用而且不報錯,我雙擊變數名,編譯器給我把同名的高亮之後,發現這個變數的定義是在使用的下方定義的,網上查詢才得知這是JS變數的一個特性,叫做變數提升,下面,先從最熟知的開始去理解這個變數
深入學習js之淺談作用域之(eval()和with)
在深入學習js之淺談作用域(一)中 將作用域定義為一套規則,用來管理引擎如何在當前作用域以及巢狀的子作用域中根據識別符號名稱進行變數查詢。 作用域分為兩種主要的工作模式:1.詞法作用域(大多數程式語言包括js) 2.動態作用域(Bash指令碼、Perl中的一些模式) 1.
【作用域】變數提升
一、什麼是變數提升 先思考下面程式碼 console.log(a); var a = 1; test(); function test(){ console.log('test is running
JS作用域和變數提升看這一篇就夠了
作用域是JS中一個很基礎但是很重要的概念,面試中也經常出現,本文會詳細深入的講解這個概念及其他相關的概念,包括宣告提升,塊級作用域,作用域鏈及作用域鏈延長等問題。 ## 什麼是作用域 第一個問題就是我們要弄清楚什麼是作用域,這不是JS獨有的概念,而是程式設計領域中通用的一個概念。我們以下面這個語句為例:
Python中的變數作用域,LEGB規則和閉包原理
問題來源 最近看到了一個python程式題,就三行程式碼,卻思考了很久才考慮明白,決定分享一下。 def num(): return [lambda x:i*x for i in range(4)] print([m(2) for m in num()]) 預計結果為:0, 2
Python3---函式的作用域,閉包及遞迴
一.函式的作用域全域性變數和區域性變數定義在函式內部的變數擁有一個區域性作用域,定義在函式外的擁有全域性作用域。(1)函式內部的變數,作用域只在函式內部,函式內部不可以直接更改函式外部的變數(2)函式內部如果需要改變全域性變數,就需要使用global修飾變數(3)在函式巢狀函
普通函式和箭頭函式在事件中的作用域,使用不使用閉包的區別
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>22-01 高階技巧</title> <
【譯】終極指南:變數提升、作用域和閉包
原文作者:Tyler McGinnis 原文連結:tylermcginnis.com/ultimate-gu… 文中部分連結可能需要梯子。 歡迎批評指正。 說出來可能嚇你一跳,在我看來,理解Javascript的最重要最基本的思路就是理解執行上下文。吃透了執行上下文,你就能更好地學
Javascript變數作用域、變數提升
Javascript變數提升 圖 1 Javascript資料型別儲存結構 Javascript 作為一種動態語言,其語法特別是變數具有更多的靈活性。 1. 先看下一個經典的面試題, var a=1; function foo(){
執行環境及作用域、變數物件、作用域鏈、閉包
一:執行環境及作用域 和 變數物件 執行環境是javascript中最為重要的一個概念。每個執行環境都有一個與之關聯的變數物件(儲存執行環境中所有定義的變數和函式)。二: 當代碼在執行環境中執行時,會建立一個作用域鏈。作用域鏈本質是一個指向變數物件的指標列表。
淺談SQL優化入門:3、利用索引
其它 工作 書籍 htm color 之前 index mage 即使 0、寫在前面的話關於索引的內容本來是想寫的,大概收集了下資料,發現並沒有想象中的簡單,又不想總結了,糾結了一下,決定就大概寫點淺顯的,好吧,就是懶,先挖個淺坑,以後再挖深一點。最基本的使用很簡單,直接就
淺談對象的創建、內存布局和訪問定位
虛擬機創建 head 分配 完成 原子性 mar ava 失敗重試 檢查 在此簡單的記錄一下《深入理解Java虛擬機》第2章的2.3節內容。 對象的創建 這裏的對象的創建是指普通的對象(不包括數組和Class對象)。對象的創建簡單來說就是執行new的時候,虛擬機做出對應
js變數提升、函式提升詳解
一、變數提升是指將變數宣告提升到它所在作用域的最開始部分 console.log(a) // undefined var a = 1; console.log(a) // 1 為什麼會出現以上的結果,是因為js的變數提升,將a變數的宣告提升到全域性作用域的最上面部分,實際程式碼如下:
淺談java中的對象、類、與方法的重載
ring bat spring 初始 [] myba strong 有關 .html 對象: 一切皆為對象。 對象包括兩部分內容:屬性(名詞形容詞),行為(動詞)。 對象和對象之間是有關系的: 派生,關聯,依賴。 類: 對同一類別的眾多對象的一種抽象。 類,還是用來生成對象
淺談ArcGIS GP服務 :一、框架介紹
GP全稱是Geoprocessing,可以對原有的功能進行補充,也就是說只要在桌面上實現的事情,在Server都可以實現。 首先來看一下Geoprocessing 框架,我使用的是ArcGIS10.2版本。 第一、ArcToolBox,自帶的系統的工具,只能複製和貼上,不能手工的建立。
淺談程式設計中的執行緒、程序、分散式系統
單執行緒與多執行緒的比較: 單執行緒就是我們學習程式設計時最開始接觸的,比如寫一個"hello world"。而在多執行緒中,其共享code、data、files,同時,它們有各自的registers和stack。 簡單地說,多執
js詞法作用域—欺騙詞法evel、with
js欺騙詞法 之前一直對欺騙詞法感到很迷,直到看了《你不知道的JavaScript》(上卷)裡面的解釋,才解決了之前的謎團,這篇文章就是在看了書這部分內容之後再加上自己的一些嘗試和理解寫下的讀書筆記。看這篇文章的時候可以自己動手試試看看輸出結果,會有不一樣的收穫,希望對大家有幫助。
淺談Java設計模式——單例項、簡單工廠、抽象工廠、觀察者
最近的專案裡面涉及到一些Java設計模式,在此簡單談一下自己的看法,以下示例一部分參考同行,大部分自己設計。 1.單例模式 如果一個類始終只能建立一個例項,則這個類成為單例類,這種設計模式稱為單例模式。 class Singleton {