js變數作用域(解析機制)

2021-07-31 21:54:49 字數 2569 閱讀 7501

作用域

全域性作用域

區域性作用域 :函式作用域

var name = 'xm';

function fn(argument)

console.log(***);

fn();

console.log(***) 這裡會發生報錯 ***變數是未定義的

全域性變數可以在區域性作用域中訪問到,區域性變數 在全域性作用域中訪問不到。

在js中沒有塊級作用域

如果有的話就叫做塊級作用域 比如

if (true) 

for (var i = 0;)

如果有塊級作用域 裡面的變數 生也蕭何 敗也蕭何

變數物件

var name = 'xm';

function fn(argument)

fn.***

fn.fn2

}window.name

window.fn

name

fnconsole.log(window.name === name);

console.log(window.fn === fn);

fnconsole.log(window.person);

console.log(window.person);結果是undefined 未定義的屬性

作用域鏈

從最裡層作用域,通過作用域鏈可以訪問到最外層的變數,

內層變數的優先順序高於外層變數的優先順序。

js解析機制-預解析

預熱

var name = 'xm';

var age = 18;

function

fn()

fn();

很正常列印的結果是 xh,接著看下面

js解析過程 (預解析, 是對 var 宣告的變數 和 function 函式進行預解析需要注意的是 argument 和區域性變數同等對待)

預解析逐行解讀**

var name = 'xm';

var age = 18;

function

fn(argument)

fn();

這裡列印的的結果是undefined 原因

window

name = undefined

age = undefined

function

fn(argument)

fnname = undefined

age = undefined

argument = undefined

先預解析,window作用域下 name=undfined,age=undefined, fn,

在fn 作用域下預解析 name=undefined,age = undefined,argument= undefined

然後逐行執行** so 返回的結果是 undefined

解析詳解 js 作用域問題1

console.log(a);

var a = 1

;

返回結果 undefined

console.log(a);

a = 1

;

這裡會發生報錯 沒有var js不能正常預解析

js作用域問題2

console.

log(a);

var a = 1;

console.

log(a);

function

a()

console.

log(a);

var a = 3;

console.

log(a);

function

a()

console.

log(a);

a();

這裡返回的結果是

function

a() 11

33報錯

分析:在預解析中 現對var 和function 進行預解析,當var宣告的變數和 function宣告的變數相同發生命名衝突時 ,預解析結果保留function 當function 與後面的function 命名發生衝突(名稱相同) ,預解析結果保留最後乙個function ,

在逐行執行過程中a()返回的結果會報錯的原因是,在a()前面 執行的var a = 3 所以此時的變數a 是常用型別 3 然後會報錯。

3.js作用域問題三 (預解析是分標籤進行的)

JS作用域解析

瀏覽器 js解析器 1 js 的預解析,找3樣東西,變數,函式,引數 var function 引數 a undefined 所有的變數,在正式執行 之前,都提前賦了乙個值 undefined未定義 fn1 function fn1 所有的函式,在正式執行 之前,都是整個函式塊 遇到重名的 只留乙個...

JS變數作用域

先明確一點 討論作用域,討論的是非物件成員的變數。在函式以及自定義物件之外宣告的變數,具有全域性作用域 1.瀏覽器會建立乙個window物件,window的所有屬性,都具有全域性作用域 2.反過來,具有全域性作用域的變數,都是window的屬性 3.具有全域性作用域的變數,任何位置都可以訪問 通過上...

js 變數 作用域

一 基本型別與引用型別 針對引用型別值時,複製的只是乙個指標,複製操作結束後,兩個變數實際上將引用同乙個物件 如果是按引用傳遞的話,那麼p就會被自動修改為指向其name屬性為 greg 的新物件,但是由下圖分析可知,引數傳遞是按值傳遞 二 執行環境和作用域 var color blue functi...