js的預解析和作用域

2022-06-25 11:51:14 字數 1544 閱讀 3023

預解析指的就是,在js檔案或者script裡面的**在正式開始執行之前,進行的一些解析工作。這個工作很簡單,就是在全域性中尋找var關鍵字宣告的變數和通過function關鍵字宣告的函式。

1.尋找 var function 引數 等關鍵字,根據var a提前設定為 a=未定義(undefined) ,所有的變數,在正式執行前都提前賦值了乙個未定義。

2.函式在正式執行**前,都是整個函式塊。fn1=function  fn1()

執行js**一般分兩步:1.預解析**。   2.逐行執行**。

var a = 1; 

var b;// 

c = 3;// 

function d()

function fn(){   

console.log('123')

fn=456;     //**逐行執行   fn被賦了乙個新的值456

作用域在js中同樣也是乙個重要的概念。它不複雜,因為es5中只有全域性作用域和函式作用域,我們都知道他沒有塊級作用域。但在es6中多了乙個let,他可以保證外層塊不受內層塊的影響。即內層塊形成了乙個塊級作用域,這是let的乙個特點。它不簡單,因為在許多的函式巢狀的情景下,只有對它理解深刻,才能更好的去分析。今天我們著重講的是函式作用域與全域性作用域。

var a=1;

function f1(){

var b=2;   

作用域是在乙個函式建立時就已經形成的,而不是呼叫時

var a=1;

function fn1(){

console.log(a)

fn1()  

第二種function fn1(){

var a=1;  

fn1();

console.log(a);  

第三種var a=1;

function fn1(){

console.log(a)

a = 2;

fn1();

console.log(a);

第四種var a=1;

function fn1(){

console.log(a)

var a = 2;

fn1();

console.log(a);  

1.全域性變數和它的作用域

全域性變數是指在程式開頭的說明部分定義和說明的量。它的作用域分為兩種情況:

(1)在全域性變數和區域性變數不同名時,其作用域是整個程式。

(2)在全域性變數和區域性變數同名時,全域性變數的作用域不包含同名區域性變數的作用域。

面試題一

var a = 10;    

function f1(){    

var b = 2 * a;    

var a = 20;

var c = a+1;    

console.log(b);     

console.log(c);   

f1()

JS中的作用域 作用域鏈和預解析

全部變數 js中除了在函式中定義的變數,都是全域性變數 全域性變數的使用範圍是作用域 作用域 就是變數的使用範圍 js中沒有塊級作用域即一對括號中定義的變數,這個變數可以在大括號外面使用 例如結果是 10並不會報錯,因為變數可以在大括號外面使用 除了函式中定義的變數 下面的這些也都可以輸出,並不會報...

js 函式 作用域 預解析

一 函式 定義 可以重複呼叫執行的 塊 一 函式的宣告和呼叫 1.宣告函式 1 命名函式 語法 function 函式名 2 函式表示式來宣告函式 匿名函式 語法 var 變數名 function eg var fun function fun 使用變數名來呼叫函式 2.呼叫函式 函式名 二 函式的...

js中的作用域 預解析

任何地方都能訪問到的物件擁有全域性作用域。1.1函式外面定義的變數擁有全域性作用域 1.2未定義直接賦值的變數自動宣告為擁有全域性作用域 通俗地講,當宣告乙個函式時,區域性作用域一級一級向上包起來,就是作用域鏈。1.當執行函式時,總是先從函式內部找尋區域性變數 2.如果內部找不到 函式的區域性作用域...