最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS中作用域以及變量范圍分析

 更新時(shí)間:2020年07月18日 22:30:50   作者:騷小孩呀  
這篇文章主要介紹了JS中作用域以及變量范圍分析,需要的朋友可以參考下

變量作用域

js作為一門腳本語(yǔ)言,他與c,java這些語(yǔ)言是不相同的。

全局變量

在js中聲明全局變量,有下面幾種方式:

1.在函數(shù)外通過(guò)var來(lái)聲明。

var test ="hello";
console.log(test);
function a(){
  test="xx";
  console.log(test);
}
a();
console.log(test);

結(jié)果:

hello
xx
xx

這種方式通過(guò)聲明的變量在任何地方都可進(jìn)行修改和使用。

2.在函數(shù)中隱士的聲明變量

function a(){
  test=22;
  console.log(test);
}
a();
console.log(test);

結(jié)果:

22
22

因?yàn)閖s是弱類型腳本語(yǔ)言,在使用之前無(wú)需定義,所以可以通過(guò)這種方式也能聲明全局變量。

來(lái)看一個(gè)反例:

var test="aa";
console.log(test);
function a(test){
  test=22;
  console.log(test);
}
a(test);
console.log(test);

結(jié)果:

aa
22
aa

可以看到在函數(shù)中修改了test值可是第二次在函數(shù)外打印的值沒(méi)有變。這是因?yàn)樵诤瘮?shù)的過(guò)程中只是進(jìn)行了值傳遞。局部變量覆蓋掉了全局變量,只是局部變量 在 修改。

因?yàn)樵诤瘮?shù)的參數(shù)內(nèi)定義的變量并不是全局變量。

反例二:

function a(){
  var test="aa";
  console.log(test);
}
a();
console.log(test);

結(jié)果

aa
notdefine

在函數(shù)內(nèi)通過(guò)var來(lái)聲明的變量是局部變量,函數(shù)外無(wú)法訪問(wèn)。

變量作用域

js的作用域和c與java這些語(yǔ)言的作用域也不相同,騷小孩在以前經(jīng)常會(huì)因?yàn)檫@個(gè)而頭疼,后來(lái)在認(rèn)真學(xué)習(xí)了以后才懂了。

1.js中沒(méi)有塊范圍。

if(1!=1){
  var y=c;
}
console.log(y)
 
if(1==1){
  var x=a;
}
console.log(x);

結(jié)果:

undefine
a

可以看到在if代碼塊定義的兩個(gè)變量,在if塊之外去打印,如果判斷成功的話,才會(huì)去執(zhí)行里邊的聲明語(yǔ)句,聲明語(yǔ)句執(zhí)行了,那么在代碼塊外邊就可訪問(wèn)到了。

也可以看出在代碼塊中聲明的變量也是全局變量。

2.js中的全局變量都會(huì)成為window的屬性

var x=0;
console.log(window.x);

結(jié)果:

0

3.變量提升

var c=0;
function a(){
  console.log(c);
}
a();

結(jié)果:

0

var c=0;
function a(){
  console.log(c);
  var c=11;
}
a();

結(jié)果:

undefine

可以看出在函數(shù)中加了一行聲明語(yǔ)句結(jié)果就會(huì)不同,這產(chǎn)生這樣的原因是什么呢?

其實(shí)第二個(gè)代碼塊的執(zhí)行順序是這樣的:

var c=0;
function a(){
  var c;
  console.log(c);
  c=11;
}
a();

在函數(shù)中他會(huì)先把聲明語(yǔ)句提升到第一行,但是并不提升賦值。然后局部變量覆蓋全局變量,在打印c的時(shí)候局部變量還沒(méi)來(lái)的

及賦值所以就是undefine。

變量提升不只會(huì)提升會(huì)執(zhí)行的變量,不會(huì)執(zhí)行的變量也會(huì)進(jìn)行提升:

var c=10;
function a(){
  console.log(c);
  if(false) {
    var c = 10;
  }
}
a();

結(jié)果:

undefine

因?yàn)樵趇f判斷中定義了局部變量c,雖然if條件不成立,但是也會(huì)進(jìn)行變量提升,所以打印c也是undefine;

4.let變量

通過(guò)上面的例子可以看到用var來(lái)定義變量的弊端:

1.var定義的變量沒(méi)有塊作用域;

2.var定義的全局變量會(huì)自動(dòng)添加全局window對(duì)象的屬性;

3.var變量會(huì)提前裝載(變量提升);

let就是為了解決這些問(wèn)題而誕生的。

for(let i=0;i<5;i++){
  
}
console.log(i);

結(jié)果:

報(bào)錯(cuò)

在代碼塊中定義了let變量,在外部引用的時(shí)候不會(huì)存在。即存在塊作用域。

let i=10;
console.log(window.i);

結(jié)果:

undefine

let聲明的變量并不會(huì)成為window的屬性。

var c=10;
function a(){
  console.log(c);
  let c=1;
  console.log(c);
}
a();

在函數(shù)中存在變量與全局變量名相同的c,因此會(huì)覆蓋掉全局變量c,但是由于let不會(huì)提前裝載,所以在第一個(gè)打印語(yǔ)句打印c時(shí)會(huì)報(bào)錯(cuò)。

到此這篇關(guān)于JS中作用域以及變量范圍分析的文章就介紹到這了,更多相關(guān)JS變量作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解JavaScript中常用操作符的使用

    詳解JavaScript中常用操作符的使用

    在 JavaScript 中,有一些操作符可以使代碼更簡(jiǎn)潔、易讀和高效。這篇文章為大家整理了11個(gè)JavaScript中常用操作符的使用,需要的可以參考一下
    2023-04-04
  • 基于JavaScript實(shí)現(xiàn)報(bào)警器提示音效果

    基于JavaScript實(shí)現(xiàn)報(bào)警器提示音效果

    這篇文章給大家分享分享一段代碼基于JavaScript實(shí)現(xiàn)報(bào)警器提示音效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-10-10
  • js實(shí)現(xiàn)匹配時(shí)換色的輸入提示特效代碼

    js實(shí)現(xiàn)匹配時(shí)換色的輸入提示特效代碼

    這篇文章主要介紹了js實(shí)現(xiàn)匹配時(shí)換色的輸入提示特效代碼,涉及javascript針對(duì)頁(yè)面元素的匹配及鼠標(biāo)事件的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 網(wǎng)頁(yè)實(shí)時(shí)顯示服務(wù)器時(shí)間和javscript自運(yùn)行時(shí)鐘

    網(wǎng)頁(yè)實(shí)時(shí)顯示服務(wù)器時(shí)間和javscript自運(yùn)行時(shí)鐘

    如果每秒通過(guò)ajax加載服務(wù)器時(shí)間的話,就會(huì)產(chǎn)生大量的請(qǐng)求,于是打算使用js 來(lái)解決這個(gè)需求
    2014-06-06
  • Bootstrap基本插件學(xué)習(xí)筆記之按鈕(21)

    Bootstrap基本插件學(xué)習(xí)筆記之按鈕(21)

    這篇文章主要為大家詳細(xì)介紹了Bootstrap基本插件學(xué)習(xí)筆記之按鈕的相關(guān)資料,實(shí)現(xiàn)按鈕狀態(tài)控制等形式的交互,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript 自定義屬性 data-*使用介紹

    JavaScript 自定義屬性 data-*使用介紹

    Html5規(guī)范中規(guī)定自定義屬性需要添加前綴data-,目的是提供與渲染無(wú)關(guān)的信息,讀取的時(shí)候是通過(guò)dataset對(duì)象,使用”.”來(lái)獲取屬性,需要去掉data-前綴
    2023-06-06
  • 小試SVG之新手小白入門教程

    小試SVG之新手小白入門教程

    這篇文章主要給大家介紹了關(guān)于SVG的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • JavaScript獲取系統(tǒng)時(shí)間的方法詳解

    JavaScript獲取系統(tǒng)時(shí)間的方法詳解

    網(wǎng)頁(yè)通過(guò)JavaScript獲取系統(tǒng)日期、時(shí)間的操作是比較常規(guī)的操作,這篇文章將為大家介紹一些常用的方法,希望對(duì)大家有一定的幫助
    2024-11-11
  • js實(shí)現(xiàn)九宮格拼圖小游戲

    js實(shí)現(xiàn)九宮格拼圖小游戲

    本文主要分享了js實(shí)現(xiàn)九宮格拼圖小游戲的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • JS?簡(jiǎn)單實(shí)現(xiàn)滑塊驗(yàn)證碼

    JS?簡(jiǎn)單實(shí)現(xiàn)滑塊驗(yàn)證碼

    這篇文章主要為大家介紹了使用JS?簡(jiǎn)單實(shí)現(xiàn)滑塊驗(yàn)證碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

天全县| 焦作市| 怀来县| 册亨县| 象州县| 盐山县| 屯昌县| 泰安市| 双牌县| 延长县| 册亨县| 蓬安县| 宣恩县| 宝应县| 海门市| 大港区| 安宁市| 太康县| 民县| 泸定县| 察隅县| 洪雅县| 当阳市| 禄劝| 微山县| 牙克石市| 朝阳县| 大荔县| 邵东县| 朝阳区| 黔西县| 梅州市| 讷河市| 天长市| 武安市| 察雅县| 淮北市| 汽车| 合肥市| 财经| 揭阳市|