javascript中變量以及函數(shù)的提升,在我們平時(shí)的項(xiàng)目中其實(shí)還是挺常用的,尤其是大型項(xiàng)目中,不知不覺就會(huì)順手添加一些變量,而有時(shí)候自己的不小心就會(huì)釀成一些不必要錯(cuò)誤,趁有時(shí)間整理一下自己對(duì)于js中變量及函數(shù)提升的理解。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、建平網(wǎng)站維護(hù)、網(wǎng)站推廣。
首先,看一個(gè)題目:
console.log(a); // undefined var a = 1; console.log(a); // 1 console.log(b()); function b(){return 2;} // 2 console.log(c) //報(bào)錯(cuò) let c = 4; console.log(d()) // 報(bào)錯(cuò) var d = function(){return 3;} // 報(bào)錯(cuò) (function(){ var m = n = 1; })() console.log(m) //報(bào)錯(cuò) console.log(n) // 1
上面的實(shí)例對(duì)于javascript變量及函數(shù)提升的可謂是淋漓盡致...
一、javascript 變量的提升
-函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部
-變量可以在使用后聲明,也就是變量可以先使用再聲明
敲黑板,劃重點(diǎn),是變量的聲明,聲明,聲明,當(dāng)變量或函數(shù)已經(jīng)初始化之后,就不會(huì)提升到函數(shù)的最頂部。這里上面的變量a已經(jīng)初始化了,所以第一個(gè)console取不到變量a得值,為undefined;
注意:變量的提升只會(huì)提升到當(dāng)前作用域下
二、javascript函數(shù)的提升
而函數(shù)b僅僅是先聲明了一個(gè)函數(shù)方法,函數(shù)c是函數(shù)表達(dá)式無法提升,所以在嚴(yán)格模式下b=2;d報(bào)錯(cuò)
對(duì)于m,n,這里就涉及到j(luò)avascript作用域的問題
首先,var m = n = 1的執(zhí)行順序是什么?并不是我們大多數(shù)人心中所想的連續(xù)賦值,javascript的賦值是從右向左的,而是 n=1;var m = n;很好,一目了然,在函數(shù)作用域內(nèi)的變量m=n,n是全局變量,最后嚴(yán)格模式下輸出結(jié)果,n=1,m報(bào)錯(cuò);
三、關(guān)于es6兩個(gè)關(guān)鍵字——let和const
let 聲明的變量只在 let 命令所在的代碼塊內(nèi)有效,不存在變量的提升
const 聲明一個(gè)只讀的常量,一旦聲明,常量的值就不能改變。一旦聲明必須初始化,否則就會(huì)報(bào)錯(cuò)
來個(gè)對(duì)比很明顯的栗子(完美的體現(xiàn)出let命令只在代碼塊內(nèi)有效的意思):
{ let test = 2; var web = 'font'; } console.log(test); // 報(bào)錯(cuò) console.log(web); // font
再次回到上面的題目,c就是報(bào)錯(cuò)的
ES6 明確規(guī)定,代碼塊內(nèi)如果存在 let 或者 const,代碼塊會(huì)對(duì)這些命令聲明的變量從塊的開始就形成一個(gè)封閉作用域。代碼塊內(nèi),在聲明變量 PI 之前使用它會(huì)報(bào)錯(cuò)。
var PI = "a"; if(true){ console.log(PI); // 報(bào)錯(cuò),即使函數(shù)外面全局聲明了PI,但在代碼塊內(nèi)還是會(huì)報(bào)錯(cuò) const PI = "3.1415926"; }
以上,就是關(guān)于javascript中變量提升的理解。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。