作用域及變數

2021-10-03 09:48:57 字數 2703 閱讀 6633

作用域(重點)

什麼是作用域,就是乙個變數可以生效的範圍

變數不是在所有地方都可以使用的,而這個變數的使用範圍就是作用域

全域性作用域

全域性作用域是最大的作用域

在全域性作用域中定義的變數可以在任何地方使用

頁面開啟的時候,瀏覽器會自動給我們生成乙個全域性作用域 window

這個作用域會一直存在,直到頁面關閉就銷毀了

// 下面兩個變數都是存在在全域性作用域下面的,都是可以在任意地方使用的

var num = 100

var num2 = 200

區域性作用域

區域性作用域就是在全域性作用域下面有開闢出來的乙個相對小一些的作用域

在區域性作用域中定義的變數只能在這個區域性作用域內部使用

在 js 中只有函式能生成乙個區域性作用域,別的都不行

每乙個函式,都是乙個區域性作用域

// 這個 num 是乙個全域性作用域下的變數 在任何地方都可以使用

var num = 100

function fn()

fn()

變數使用規則(重點)

有了作用域以後,變數就有了使用範圍,也就有了使用規則

變數使用規則分為兩種,訪問規則 和 賦值規則

訪問規則

當我想獲取乙個變數的值的時候,我們管這個行為叫做 訪問

獲取變數的規則:

首先,在自己的作用域內部查詢,如果有,就直接拿來使用

如果沒有,就去上一級作用域查詢,如果有,就拿來使用

如果沒有,就繼續去上一級作用域查詢,依次類推

如果一直到全域性作用域都沒有這個變數,那麼就會直接報錯(該變數 is not defined)

var num = 100

function fn()

fn()

變數的訪問規則 也叫做 作用域的查詢機制

作用域的查詢機制只能是向上找,不能向下找

function fn()

fn()

console.log(num) // 發現自己作用域沒有,自己就是全域性作用域,沒有再上一級了,直接報錯

賦值規則

當你想給乙個變數賦值的時候,那麼就先要找到這個變數,在給他賦值

變數賦值規則:

先在自己作用域內部查詢,有就直接賦值

沒有就去上一級作用域內部查詢,有就直接賦值

在沒有再去上一級作用域查詢,有就直接賦值

如果一直找到全域性作用域都沒有,那麼就把這個變數定義為全域性變數,在給他賦值

function fn()

fn()

// fn 呼叫以後,要給 num 賦值

// 檢視自己的作用域內部沒有 num 變數

// 就會向上一級查詢

// 上一級就是全域性作用域,發現依舊沒有

// 那麼就會把 num 定義為全域性的變數,並為其賦值

// 所以 fn() 以後,全域性就有了乙個變數叫做 num 並且值是 100

console.log(num) // 100

遞迴函式

什麼是遞迴函式

在程式設計世界裡面,遞迴就是乙個自己呼叫自己的手段

遞迴函式: 乙個函式內部,呼叫了自己,迴圈往復

// 下面這個**就是乙個最簡單的遞迴函式

// 在函式內部呼叫了自己,函式一執行,就呼叫自己一次,在呼叫再執行,迴圈往復,沒有止盡

function fn()

fn()

其實遞迴函式和迴圈很類似

需要有初始化,自增,執行**,條件判斷的,不然就是乙個沒有盡頭的遞迴函式,我們叫做 死遞迴

簡單實現乙個遞迴

我們先在用遞迴函式簡單實現乙個效果

需求: 求 1 至 5 的和

先算 1 + 2 得 3

再算 3 + 3 得 6

再算 6 + 4 得 10

再算 10 + 5 得 15

結束開始書寫,寫遞迴函式先要寫結束條件(為了避免出現 「死遞迴」)

function add(n)

}add(1)

再寫不滿足條件的時候我們的遞迴處理

function add(n) else

}add(1)

簡單了解物件

物件是乙個複雜資料型別

其實說是複雜,但是沒有很複雜,只不過是儲存了一些基本資料型別的乙個集合

var obj =

這裡的 {} 和函式中的 {} 不一樣

函式裡面的是寫**的,而物件裡面是寫一些資料的

物件就是乙個鍵值對的集合

{} 裡面的每乙個鍵都是乙個成員

也就是說,我們可以把一些資料放在乙個物件裡面,那麼他們就互不干擾了

其實就是我們準備乙個房子,把我們想要的資料放進去,然後把房子的位址給到變數名,當我們需要某乙個資料的時候,就可以根據變數名裡面儲存的位址找到對應的房子,然後去房子裡面找到對應的資料

建立乙個物件

字面量的方式建立乙個物件

// 建立乙個空物件

var obj = {}

// 像物件中新增成員

obj.name = 『jack』

obj.age = 18

內建建構函式的方式建立物件

// 建立乙個空物件

var obj = new object()

// 向物件中新增成員

obj.name = 『rose』

obj.age = 20

object 是 js 內建給我們的建構函式,用於建立乙個物件使用的

Js 變數及作用域

一 變數包含兩種不同資料型別的值 基本型別值 引用型別值 1 基本型別值 1.簡單的資料段,被儲存在棧記憶體中 2.按值訪問 3.不能給基本型別的值新增屬性 4.從乙個變數向另乙個變數複製值時,會建立這個值的副本,兩個變數不相互影響 2.引用型別值 1.值是儲存在記憶體中的物件,儲存在堆記憶體中 2...

作用域,變數作用域,作用域鏈知識

第2章 變數作用域 第3章 作用域鏈 預覽 1.全域性作用域 整個script標籤下 或者是單獨的js檔案 外部js 2.區域性作用域也叫 函式作用域 在函式內部就是區域性作用域 這個 的名字 變數 只在函式內部起作用和效果 3.不同作用域下,定義相同變數名是不衝突的。如果是在同一作用域宣告2個相同...

變數作用域

python任何變數都有其特定的作用域 在函式內部的變數一般只能在函式內部使用,這些只能在程式特定的區域使用的變數稱為區域性變數.在乙個檔案頂部,在函式的外部定義的變數,可以供該檔案的任何函式呼叫,這樣的變數稱為全域性變數 區域性變數和全域性變數的關係 區域性變數可以通過global關鍵字強制宣告為...