**
1.全域性作用域
全域性作用域是最大的作用域
在全域性作用域中定義的變數可以在任何地方使用
頁面開啟的時候,瀏覽器會自動給我們生成乙個全域性作用域 window
這個作用域會一直存在,直到頁面關閉就銷毀了
// 下面兩個變數都是存在在全域性作用域下面的,都是可以在任意地方使用的
var num = 100
var num2 = 200
2. 區域性作用域
區域性作用域就是在全域性作用域下面有開闢出來的乙個相對小一些的作用域
在區域性作用域中定義的變數只能在這個區域性作用域內部使用
在 js 中只有函式能生成乙個區域性作用域,別的都不行
每乙個函式,都是乙個區域性作用域
// 這個 num 是乙個全域性作用域下的變數 在任何地方都可以使用
var num = 100
function fn()
fn()
首先,在自己的作用域內部查詢,如果有,就直接拿來使用
如果沒有,就去上一級作用域查詢,如果有,就拿來使用
如果沒有,就繼續去上一級作用域查詢,依次類推
如果一直到全域性作用域都沒有這個變數,那麼就會直接報錯(該變數 is not defined)
var num =
100functionfn(
)fun()
}fn()
作用域的查詢機制只能是向上找,不能向下找
functionfn(
)fn()
console.
log(num)
// 發現自己作用域沒有,自己就是全域性作用域,沒有再上一級了,直接報錯
當你想給乙個變數賦值的時候,那麼就先要找到這個變數,在給他賦值
變數賦值規則:
先在自己作用域內部查詢,有就直接賦值
沒有就去上一級作用域內部查詢,有就直接賦值
在沒有再去上一級作用域查詢,有就直接賦值
如果一直找到全域性作用域都沒有,那麼就把這個變數定義為全域性變數,在給他賦值
functionfn(
)fn()
// fn 呼叫以後,要給 num 賦值
// 檢視自己的作用域內部沒有 num 變數
// 就會向上一級查詢
// 上一級就是全域性作用域,發現依舊沒有
// 那麼就會把 num 定義為全域性的變數,並為其賦值
// 所以 fn() 以後,全域性就有了乙個變數叫做 num 並且值是 100
console.
log(num)
// 100
需求: 求 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
)
// 斐波那契數列
// 1 1 2 3 5 8 13 21 34...
// 求 斐波那契數列 的 第幾位 是哪乙個數字
function
fn(n)
return
fn(n -1)
+fn(n -2)
}var res =fn(
10)console.
log(res)
物件是乙個複雜資料型別
var obj =
這裡的 和函式中的 不一樣
函式裡面的是寫**的,而物件裡面是寫一些資料的
物件就是乙個鍵值對的集合
字面量的方式建立乙個物件
// 建立乙個空物件
var obj =
// 像物件中新增成員
obj.name =
'jack'
obj.age =
18
內建建構函式的方式建立物件
// 建立乙個空物件
var obj =
newobject()
// 向物件中新增成員
obj.name =
'rose'
obj.age =
20
設定物件作用域
設定物件作用域 物件的作用域決定哪些指令碼可以使用該物件。預設情況下,當您建立物件例項時,該物件具有頁作用域。同一 asp 頁中的任何指令碼命令都能使用該頁作用域的物件 當 asp 頁送回客戶端時,該物件即被釋放。對大多數物件來說,推薦的作用域是頁作用域。您可以改變乙個物件的作用域,使其可被其他頁的...
設定物件作用域
設定物件作用域 物件的作用域決定哪些指令碼可以使用該物件。預設情況下,當您建立物件例項時,該物件具有頁作用域。同一 asp 頁中的任何指令碼命令都能使用該頁作用域的物件 當 asp 頁送回客戶端時,該物件即被釋放。對大多數物件來說,推薦的作用域是頁作用域。您可以改變乙個物件的作用域,使其可被其他頁的...
函式物件 作用域
例項1 通過外部調取內部值 函式物件 作用域 打破函式呼叫層級,從外部調取內部函式的值 正常情況只能通過f1去呼叫裡面函式inner 的值 def f1 def inner print from inner inner f1 實現外部調取內部函式的輸出值 思路 先呼叫出內建函式實體地址,再通過實體地...