本文為大家帶來一篇基於js的變數提升和函數提升(詳解)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。
一、變數提升
在ES6之前,JavaScript沒有區塊級作用域(一對花括號{}即為一個區塊級作用域),只有全域作用域和函數作用域。變數提升即將變數宣告提升到它所在作用域的最開始的部分。
上個履歷的範例如:
console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () { console.log(a); // undefined var a = 'aaa'; console.log(a); // aaa } fn();
之所以會是以上的列印結果,是由於js的變數提升,實際上上面的程式碼是按照以下來執行的:
var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值 console.log(global); // undefined global = 'global'; // 此时才赋值 console.log(global); // 打印出global function fn () { var a; // 变量提升,函数作用域范围内 console.log(a); a = 'aaa'; console.log(a); } fn();
二、函數提升
js中建立函數有兩種方式:函數宣告式和函數字面量式。只有函數宣告才存在函數提升!如:
console.log(f1); // function f1() {} console.log(f2); // undefined function f1() {} var f2 = function() {}
只會有以上的列印結果,是由於js中的函數提升導致程式碼實際上是按照以下來執行的:
function f1() {} // 函数提升,整个代码块提升到文件的最开始<br>console.log(f1); console.log(f2); var f2 = function() {}
結語:基本上就是這樣,要熟練的話可以多做些練習,test:
console.log(f1()); console.log(f2); function f1() {console.log('aa')} var f2 = function() {}
(function() { console.log(a); a = 'aaa'; var a = 'bbb'; console.log(a); })();
相關推薦:
以上是js的變數提升與函數提升詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!