寫在前面
朋友萌,又又又又見面啦,我爭取在12點前寫出來,應該有人會看吧?不會吧不會吧?不會沒人看我寫博客吧?
今天講js中的作用域,預決議與變數宣告提升,要好好學習嗷,面試要考嗷,
作用域
就是變數的有效范圍, 在一定的空間里可以對資料進行讀寫操作,這個空間就是資料的 作用域,
1、全域作用域:
最外層函式定義的變數擁有全域作用域,即對任何內部函式來說,都是 可以訪問的;
2、區域作用域:
區域作用域一般只在固定的代碼片段內可訪問到,而對于函式外部是無 法訪問的,最常見的例如函式內部,在 ES6 之前,只有函式可以劃分變數的作用域,所以 在函式的外面無法訪問函式內的變數,
3、塊級作用域:
凡是代碼塊就可以劃分變數的作用域,這種作用域的規則就叫塊級作用域 塊級作用域 函式作用域 詞法作用域之間的區別:
3.1)塊級作用域和函式作用域描述的是,什么東西可以劃分變數的作用域
3.2)詞法作用域描述的是,變數的查找規則
之間的關系:
1、 塊級作用域 包含 函式作用域
2、 詞法作用域 與 塊級作用域、函式作用域之間沒有任何交集, 他們從兩個角度描 述了作用域的規則
ES6 之前 JavaScript 采用的是函式作用域+詞法作用域,ES6 js 采用的是塊級作用域+詞 法作用域
預決議
JavaScript 代碼的執行是由瀏覽器中的 JavaScript 決議器來執行的,JavaScript 決議器執 行 JavaScript 代碼的時候,分為兩個程序:預決議程序和代碼執行程序
預決議程序:
1.把變數的宣告提升到當前作用域的最前面,只會提升宣告,不會提升賦值
2.把函式的宣告提升到當前作用域的最前面,只會提升宣告,不會提升呼叫
3.先提升 var,在提升 function
JavaScript的執行程序:
// 案例 1
var a = 25;
function abc() {
alert(a);
var a = 10;
}
abc(); // 案例 2
console.log(a);
function a() { console.log('aaaaa');
}var a = 1;
console.log(a);
變數提升
變數提升:定義變數的時候,變數的宣告會被提升到作用域的最上面,變數的賦值不會提升
函式提升:JavaScript 決議器首先會把當前作用域的函式宣告提前到整個作用域的最前面
/ 1、-----------------------------------
var num = 10;
fun();
function fun() { console.log(num);
var num = 20;
}
//2、-----------------------------------
var a = 18;
f1();
function f1() { var b = 9;
console.log(a);
console.log(b);
var a='123';
// 3、-----------------------------------
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() { var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
變數宣告提升: 使用 var 關鍵字定義的變數,被稱為變數宣告; 函式宣告提升的特點是,在函式宣告的前面,可以呼叫這個函式
寫在最后
啊今天的任務也圓滿完成啦,明天見呀~你不準備給我一個贊咩?不準備收藏咩?不準備評論個深度好文神馬的咩?蟹蟹蟹蟹~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/293192.html
標籤:其他
下一篇:jQuery學習筆記
