首頁  >  文章  >  web前端  >  js的變數提升與函數提升詳解

js的變數提升與函數提升詳解

小云云
小云云原創
2018-02-06 11:44:591006瀏覽

本文為大家帶來一篇基於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(&#39;aa&#39;)}
var f2 = function() {}


(function() {
console.log(a);
a = &#39;aaa&#39;;
var a = &#39;bbb&#39;;
console.log(a);
})();

相關推薦:

關於javascript變數提升的詳細講解

js變數提升和函數宣告預解析實例詳解

JS中作用域與變數提升(hoisting)的深入理解

#

以上是js的變數提升與函數提升詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn