在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ JS全局變量和函數(shù)作用域變量區(qū)別

JS全局變量和函數(shù)作用域變量區(qū)別

有這么一組題目看得我是目瞪口呆:

var var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
} 
funtest();
//結(jié)果為:undefined
////////////////////////
var var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
} 
funtest();
//結(jié)果為:1
////////////////////////
 var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
}
funtest();
//結(jié)果為:undefined
/////////////////////
var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
}
funtest();
//結(jié)果為:1

和我的理解不一樣,求大佬解釋一下

回答
編輯回答
祈歡
var var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
} 
funtest();
//結(jié)果為:undefined

作用域鏈從內(nèi)向外查找,輸出undefinde是因?yàn)楹瘮?shù)變量聲明提升,上面的代碼等價(jià)于

function funtest() {
 var var01;
 document.write(var01);  // 這個(gè)時(shí)候打印,var01的值是undefinde
 var01= 0;
} 

2.

////////////////////////
var var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
} 
funtest();
//結(jié)果為:1

如過(guò)在函數(shù)內(nèi)部聲明的變量沒(méi)有寫(xiě)var,這個(gè)變量會(huì)是一個(gè)全局變量,var01 = 0;相當(dāng)于改變函數(shù)外面var01的值。

2017年2月20日 21:09
編輯回答
任她鬧

你也沒(méi)說(shuō)你怎么理解的啊....
這些屬于比較基礎(chǔ)的知識(shí),樓主可以先去看看書(shū),比如js高程,自然就理解了。
兩個(gè)概念:作用域鏈以及聲明提升,這里以第一個(gè)例子為例:

var var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
} 
funtest();

在創(chuàng)建funtest函數(shù)作用域的時(shí)候,var 聲明的變量 var01提升到了該作用域頂部,聲明和賦值是兩個(gè)過(guò)程:
代碼變成了:

var var01;
document.write(var01);
var01 = 1;

再講作用域鏈,在讀到var01這個(gè)變量的時(shí)候,沿著作用域鏈逐級(jí)向上回溯,在函數(shù)作用域中已經(jīng)有了var01這個(gè)變量了,好了回溯停止不找了,在打印的時(shí)候,還沒(méi)有進(jìn)行賦值,所以u(píng)ndefined

2018年4月20日 05:58