JS中函式的作用域及作用域鏈以及預解釋

2021-09-29 13:05:33 字數 1086 閱讀 6373

全域性變數:在函式以外用var宣告的變數在全域性都可以數用,就是全域性變數(如果頁面不關閉,那麼就不會釋放,就會佔記憶體,消耗記憶體)

區域性變數:在函式內部定義的變數是區域性變數,只能在函式內部使用,外部不能使用(*當函式呼叫完畢,區域性變數就釋放了);

全域性作用域:全域性變數使用的範圍

作用域鏈:

var num = 10;

function f1(num)

f3();

}f2();

} console.log(f1(10))

//結果為40

//如果f3中沒有num就會到f2中去尋找num,找到後列印f2中的值,如果沒有到f1中尋找num,如果有列印f1的num值,如果沒有再到全域性中尋找num,找到列印num的值,作用域鏈的形成與函式定義階段和函式在**執行怎麼執行,與關係。

預解析

在解析**之前,把變數的宣告和函式的宣告提前到當前所在的作用域的最上面,執行期上下文,找形參和變數宣告 將變數和形參作為ao的屬性名 值為undefined,將實參和形參統一,在函式裡面找函式宣告,值賦予函式體,函式執行完畢。

f1();

function f1()

上面的**把函式提前宣告了,所以f1呼叫的時候不會報錯

//案例1:

f1();

function f1()

上面的**相當於:

function f1()

f1();

案例2:

function fn(a,b)

console.log(b)// 列印 fn n(b)

c=50;

var c= function(e)

console.log(c); //fn

a=999;

function a()

console.log(a); //999

function b(d)

b=333;

console.log(b); //333

}fn(10,20)

函式作用域及作用域鏈

變數作用域 全域性作用域 在j ascript中全域性變數的作用域比較簡單,它的作用域是全域性的,在 的任何地方都是有定義的。然而函式的引數和區域性變數只在函式體內有定義 1.函式外面定義的變數擁有全域性作用域 var n 2 function fn console.log fn 1 console...

js 函式中的作用域和作用域鏈

js看似有 塊級作用域 其實它沒有,取而代之的是 函式作用域 在乙個 塊 一對花括號內 定義的變數在 塊外部是不可見的,且在 塊執行結束後被釋放掉。定義在該函式中的引數和變數在函式外部不可見 例子1 而乙個函式內部任何位置定義的變數,在該函式內部任何地方都可見 例子2 解釋二 也就是說,變數不僅在宣...

JS作用域和作用域鏈

什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...