溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript變量提升和嚴(yán)格模式實(shí)例分析

發(fā)布時(shí)間:2020-09-18 15:35:59 來(lái)源:腳本之家 閱讀:152 作者:Cairo960918 欄目:web開發(fā)

本文實(shí)例講述了JavaScript變量提升和嚴(yán)格模式。分享給大家供大家參考,具體如下:

1.什么是變量提升

所謂的變量提升指的是:函數(shù)聲明和變量聲明總是會(huì)被解釋器悄悄地被"提升"到方法體(作用域)的最頂部。

下面我們通過(guò)一個(gè)例子來(lái)詳細(xì)說(shuō)明一下。

//變量聲明在使用之前
var x;
console.log(x);//undefined
//變量聲明在使用之后
console.log(y);//undefined
var y;
//上面的式子可以寫成下面的樣子
/*
變量提升:把x,y提升到頂部
var x;
var y;
console.log(x);
console.log(y);
*/

從上面這個(gè)例子我們可以看到:

①變量的使用有兩種形式,先聲明再使用或者先使用后聲明;

②無(wú)論是哪一種形式都不影響變量的使用,這是因?yàn)橛凶兞刻嵘拇嬖?,每一個(gè)你定義的變量都會(huì)被提升到頂部,也就是函數(shù)最開始的部分,這就變成了你在使用變量時(shí)其實(shí)都已經(jīng)聲明變量了。

下面我舉一個(gè)經(jīng)典的例子來(lái)更好地理解一下。

//經(jīng)典案例:window表示全局,判斷條件(變量a是否有在全局下)是在變量a聲明之前
if(a in window){
  var a;
  console.log('a in window');
}else{console.log('a not in window');}
//a in window
//相當(dāng)于:
/*
var a; //a被提升到頂部
if(a in window){
  console.log('a in window');
}else{console.log('a not in window');}
*/

這是變量提升的一個(gè)很好的例子,可以看到打印出來(lái)的結(jié)果表明,在我們使用a之前,聲明變量a就被提升到頂部。

但是,要注意的是JavaScript 只有聲明的變量會(huì)提升,初始化的不會(huì)。

console.log(c);//undefined
var c = 1; //初始化
/*
var c;
console.log(c);
c = 1;
*/
var d;//聲明d
d = 1;//初始化
console.log(d);//1

上面的c打印結(jié)果為undefined,這是因?yàn)樘嵘闹挥新暶髯兞?code>var c,而初始化的c=1沒(méi)有提升而在使用之后。

為了避免上面出現(xiàn)的變量提升的問(wèn)題,通常我們?cè)诿總€(gè)作用域開始前聲明我們要使用的變量。

2.嚴(yán)格模式

嚴(yán)格模式的寫法就是在代碼編寫之前加上"use strict",嚴(yán)格模式要求你不能使用未聲明的變量,否則會(huì)報(bào)錯(cuò)。

例如:

"use strict"; //嚴(yán)格模式
m =1;
console.log(m);//m is not defined
//在嚴(yán)格模式下,因?yàn)閙未被聲明就被使用或者初始化則會(huì)報(bào)錯(cuò)
var n = 1;
console.log(n);//1

但是在沒(méi)有使用嚴(yán)格模式的時(shí)候:

m =1;
console.log(m);//1
//在非嚴(yán)格模式下,同樣這樣寫就不會(huì)報(bào)錯(cuò)

雖然還是沒(méi)有聲明變量m但還是可以使用的。

所以,還是建議大家盡可能得使用嚴(yán)格模式來(lái)編寫javascript代碼,以消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,讓自己成為一個(gè)更優(yōu)秀的程序員。

感興趣的朋友還可以使用本站在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行結(jié)果。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI