07 javascript作用域與作用域鏈

2021-08-28 19:37:14 字數 1748 閱讀 6308

理解

就是一塊"地盤", 乙個**段所在的區域

它是靜態的(相對於上下文物件), 在編寫**時就確定了

分類
全域性作用域

函式作用域

沒有塊作用域(es6有了)

作用

隔離變數,不同作用域下同名變數不會有衝突

//es5 沒塊作用域

if(true)

console.log(c) //3

var a = 10,

b = 20

function fn(x)

bar(100)//bar() 1000 20 300 400 100

bar(200)//bar() 1000 20 300 400 200

}fn(10)

區別1
全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。

而不是在函式呼叫時

全域性執行上下文環境是在全域性作用域確定之後, js**馬上執行之前建立

函式執行上下文環境是在呼叫函式時, 函式體**執行之前建立

區別2
作用域是靜態的, 只要函式定義好了就一直存在, 且不會再變化

上下文環境是動態的, 呼叫函式時建立, 函式呼叫結束時上下文環境就會被釋放

聯絡
上下文環境(物件)是從屬於所在的作用域

全域性上下文環境==>全域性作用域

函式上下文環境==>對應的函式使用域

理解

多個上下級關係的作用域形成的鏈, 它的方向是從下向上的(從內到外)

查詢變數時就是沿著作用域鏈來查詢的

查詢乙個變數的查詢規則
在當前作用域下的執行上下文中查詢對應的屬性, 如果有直接返回, 否則進入2

在上一級作用域的執行上下文中查詢對應的屬性, 如果有直接返回, 否則進入3

再次執行2的相同操作, 直到全域性作用域, 如果還找不到就丟擲找不到的異常

面試題1

var x = 10;

function fn()

function show(f)

show(fn);

//10

面試題2
var fn = function () 

fn()

/* ƒ ()

* */

var obj =

}obj.fn2()

// uncaught referenceerror:

// fn2 is not defined at object.fn2

07 javascript內建物件Date

在js中使用date物件來表示乙個時間 如果直接使用建構函式建立乙個date物件,則會封裝為當前 執行的時間.var d new date 建立乙個指定的時間物件需要在建構函式中傳遞乙個表示時間的字串作為引數 日期的格式 月份 日 年 時 分 秒 var d2 new date 2 18 2011 ...

JavaScript 作用域,作用域鏈詳解

前言 es5缺少區域性作用域的概念,而es6已經補充了es6的概念。一 作用域 把作用域比作乙個個封閉的方塊,在相同乙個封閉方塊中的物體可以相互接觸,但是無法和別的封閉方塊中的物體直接接觸。二 全域性作用域 這個就是簡單的全域性作用域。全域性作用域相當於乙個最大的封閉空間,他裡面還有乙個個小的封閉空...

Javascript變數作用域

1.變數作用域是什麼鬼?2.全域性變數 全域性變數擁有全域性作用域 作用範圍在整個頁面中 在 的任何地方都有定義。擁有全域性作用域的情形 1 宣告在函式外部的變數。eg var a 全域性變數 function b 2 宣告變數時,缺少關鍵字var。eg function b 函式引數的變數 fun...