亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js里面的變量范圍分享

 更新時間:2020年07月18日 22:06:15   作者:鍵盤鋼琴師  
今天寫一個滑動自動加載的功能的時候,遇到了切換就發(fā)現(xiàn)加載完畢的情況,查看了下發(fā)現(xiàn)可能是js的全局變量和局部變量的問題,自己測試了下,果不其然,下面分享下

先上兩段代碼

<script>
var i = 2;
function test(){
	var i = 1;
}
test();
alert(i);//值為2
</script>
<script>
var i = 2;
function test(){
	i = 1;
}
test();
alert(i);//值為1
</script>

是不是覺得很奇怪,我當時也是這樣搞暈了,代碼沒問題啊,咋回事,最后找了找,原來是var作怪。我自己的理解是,var是用來申明變量的,在方法體里面申明的就是局部變量,局部變量自然不會影響到全局變量的值了。所以第一段代碼alert出來的是2;第二段由于沒有用var關(guān)鍵詞申明,所以默認用的是全局的i的值,在全局里面改變?nèi)肿兞康闹?,所以全局變量i的值被修改成1了。

下面再多看幾個demo

<script>
/*這個很簡單,就是改變?nèi)值闹?/
var i = 2;
function test(){
	alert(i);//彈框2
	i = 1;
	alert(i);//彈框1
}
test();
alert(i);//彈框1
</script>
<script>
/*這里就有點奇怪了,為啥第一個alert彈框是undefine呢?*/
var i = 2;
function test(){
	alert(i);//彈框undefined,查了下,這個i不是全局變量,因為在function scope里已經(jīng)聲明了,var i = 1;所以全局的i被覆蓋了,這說明了js在執(zhí)行前會對整個腳本文件的定義部分做完整分析,所以在test()函數(shù)執(zhí)行前,函數(shù)體中的變量i都已經(jīng)被指向了內(nèi)部的局部變量,而不是指向外部的全局變量,但這是i還沒有申明和賦值,所以彈的是undefined。(從刀刀的專欄(http://blog.csdn.net/zyz511919766/article/details/7276089)得知)
	var i = 1;
	alert(i);//彈框1 這里已經(jīng)賦值了1,然后在函數(shù)體里面,所以彈值是1
}
test();
alert(i);//彈框2 因為局部變量不會影響全局變量,所以這里彈的值是2
</script>
<script>
var i =1;
function test(){
	alert(i);//undefined 這個上一段代碼已經(jīng)說了,js會先做解析,只要有var,就會只想局部變量,但是這個時候同樣還沒定義和賦值,所以undefined
	i=2;
	alert(i)//2 已經(jīng)賦值了,所以是2
	var i;
	alert(i);//2 這里還是2.因為在前面已經(jīng)把2賦值給i了
}
test();
alert(i);//1 彈全局的值,毫無疑問
</script>
<script>
/**如果我們方法體里面變量名是一樣,但是我又要用到全局的變量怎么辦呢**/
var i =1;
function test(){
	var i = 2;
	alert(i);//這里是2,不解釋
	alert(window.i);//這里是1 因為用window.globalVariableName方式可以訪問到全局的i
}
test();
alert(i);//這里是1,不解釋
</script>

解釋性文字都寫在代碼里面,大家搞不懂,可以運行下,就到這了

相關(guān)文章

最新評論