日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别

發布時間:2025/3/21 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Javascript中的變量定義方式有以下三種方式: 1、直接定義變量,var與let均不寫;

a = 10;

2、使用var關鍵字定義變量

var a = 10;

3、使用let關鍵字定義變量

let a = 10;

這三種方式有什么區別呢? JavaScript全局變量和局部變量又是什么呢? 可以帶著這兩個問題往下看。

變量的作用域

變量是有作用域的,大多數語言中的變量的作用域都有全局變量和局部變量之分。 首先我們建立一個文件test1.html,從中輸入以下代碼:

<script type="text/javascript">//在函數外使用var關鍵字聲明變量test_var1var test_var1 = "變量1";//定義函數testFunfunction testFun(){//在函數中定義變量沒加任何關鍵字的變量test_var2test_var2 = "變量2";//函數內使用var關鍵字定義的test_var3var test_var3 = "變量3";}//函數執行testFun();alert(test_var1 + "n" + test_var2);alert(test_var3); </script>

在瀏覽器打開我們的html頁面,可以看到只彈出了一個彈窗:

第二個彈窗為什么沒有成功彈出呢? 我們按F12,看一下報錯內容:

由此可以看出 test_var3 在函數執行后是沒有被定義的。說明在函數體內用 var 關鍵字聲明的變量 test_var3 是局部變量; 在函數體外使用 var 關鍵字定義的變量test_var1 和在函數體內未用任何關鍵字定義的變量 test_var2 是全局變量。

得出結論: 在函數體外使用var關鍵字定義的變量和在函數體內未用任何關鍵字聲明的變量是全局變量,在函數體內使用var關鍵字聲明的變量是局部變量。

var聲明的全局變量和局部變量同名

我們建立一個文件test2.html,從中輸入以下代碼:

<script type="text/javascript">//在函數外使用var關鍵字聲明變量test_varvar test_var = "函數體外的變量";//定義函數testFunfunction testFun(){//函數內使用var關鍵字聲明變量test_varvar test_var = "函數體內的變量";//彈窗彈出test_varalert(test_var);}//函數執行testFun();alert(test_var); </script>

打開該文件,會彈出兩次彈窗,分別是:

點擊確定后還會彈窗一次:

在函數體外定義的全局變量test_var,但是在函數體內又定義了局部變量test_var ,在函數中彈出的test_var是函數體內的局部變量覆蓋函數體外的全局變量的結果,當離開函數后,局部變量失效,將會看到全局變量。

JavaScript中的變量有塊范圍嗎?

在Java、C、C++等語言中,在 if塊 ,循環塊中定義的變量,出了該塊之后將,不能繼續訪問。那JavaScript中是否也如此呢?

我們建立一個文件test3.html,從中輸入以下代碼:

<script type="text/javascript">//定義函數testFunfunction testFun(){//函數內使用var關鍵字聲明變量test_varvar test_var1 = "1";//if代碼塊if(test_var1 == "1"){//定義變量test_var2var test_var2 = 10;//for代碼塊for(var i = 0; i < 5; i++){//打印輸出idocument.write(i);}}//在if塊外訪問test_var2alert(test_var2);//在循環體外訪問ialert(i);}//函數執行testFun(); </script>

我們可以看到兩個彈窗:

并且能看到頁面上的輸出

由此我們可以知道: 在函數體內中的 if 塊和循環體內定義的變量,在函數內都是可以訪問的。

變量提升

前面介紹中已經知道:局部變量和全局變量同名時,局部變量會覆蓋全局變量。 我們定義test4.html,輸入以下代碼:

<script type="text/javascript">//在函數外使用var關鍵字聲明變量test_varvar test_var = "函數外的test_var";//定義函數testFunfunction testFun(){//打印輸出test_vardocument.writeln(test_var + "<br>");//函數內使用var關鍵字定義的test_varvar test_var = "函數內的test_var";//再次打印輸出test_vardocument.writeln(test_var + "<br>");}//函數執行testFun(); </script>

輸出如下:

在輸出全局變量時,居然輸出的是underfined,這是什么情況呢? 這便是JavaScript的變量提升機制起了”作用“。下面介紹一下變量提升: 在函數體內變量聲明總會被解釋器”提升“到函數體的頂部, 那么上面的代碼,會變成如下情況:

<script type="text/javascript">//在函數外使用var關鍵字聲明變量test_varvar test_var = "函數外的test_var";//定義函數testFunfunction testFun(){//聲明被提升到頂部,但是未被賦值var test_var;//打印輸出test_vardocument.writeln(test_var + "<br>");//給test_var賦值test_var = "函數內的test_var";//再次打印輸出test_vardocument.writeln(test_var + "<br>");}//函數執行testFun(); </script>

由此可見,變量提升只提升聲明部分,不提示賦值部分。

我們定義test5.html,輸入以下代碼:

<script type="text/javascript">//在函數外使用var關鍵字聲明變量test_var1var test_var1 = "函數外的test_var1";//在函數外使用var關鍵字聲明變量test_var2var test_var2 = "函數外的test_var2";//定義函數testFunfunction testFun(){//打印輸出test_var1document.writeln(test_var1 + "<br>");//打印輸出test_var2document.writeln(test_var2 + "<br>");//for循環的條件為假不會被執行for(;-1>5;){//在函數內使用var關鍵字聲明變量test_var1var test_var1 = "函數內的test_var1";}return;//return后面的語句不會被執行//在函數內使用var關鍵字聲明變量test_var2var test_var2 = "函數內的test_var2";}//函數執行testFun(); </script>

輸出如下:

在函數內的test_var1 和test_var2 的變量定義根本不會被執行,為何還是輸出undefined呢? 這也是變量提升起的”作用“。

let關鍵字定義變量

從前面我們可以看到,var定義的變量沒有塊作用域,還有變量提升機制,為了克服這些問題,便引入了let關鍵字。

我們定義test6.html,輸入以下代碼:

<script type="text/javascript">//循環體for(let v = 0;v < 5;v++){//在循環體內輸出vconsole.log(v);}//在循環體外輸出vconsole.log(v); </script>

按F12,打開console,看到輸出如下:

可以看到在循環體外不能訪問循環體內定義的變量。

我們定義test7.html,輸入以下代碼:

<script type="text/javascript">//在函數外使用let關鍵字聲明變量test_varlet test_var = "函數外的test_var";//定義函數testFunfunction testFun(){//打印輸出test_varconsole.log(test_var);//在函數內使用let關鍵字聲明變量test_varlet test_var = "函數內的test_var"//打印輸出test_varconsole.log(test_var); }//函數執行testFun(); </script>

按F12,打開console,看到輸出如下:

這是因為函數內有和全局變量同名的局部變量,會覆蓋掉全局變量,但是let關鍵字聲明的變量并沒有提升機制,所以會報錯。

小結

本文介紹了JavaScript中的局部變量和全局變量的知識和var,let聲明變量的區別。給我們的啟示是如果瀏覽器支持let關鍵字,那么就盡量用let來避免變量提升機制等情況。

歡迎關注

掃下方二維碼即可關注,微信公眾號:code隨筆

http://weixin.qq.com/r/XSh7YwTEzFmzrUAA931P (二維碼自動識別)

總結

以上是生活随笔為你收集整理的java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看国产成人 | 最近中文字幕无免费 | 国产欧美日韩一区二区三区 | 99夜色| 啪免费视频 | 久久久噜噜噜久久 | 亚洲精品综合网 | 欧美黄色a级大片 | 免费日韩精品 | 亚洲精品自拍偷拍 | 成人午夜视频在线播放 | 香蕉尹人网 | 欧美两根一起进3p做受视频 | 少妇一区二区视频 | 在线免费观看高清视频 | av激情在线观看 | 国产一级二级三级在线观看 | 日本一二三不卡视频 | 成人免费视频国产免费麻豆 | 性生生活大片又黄又 | 亚洲天堂男人av | jizz在亚洲| 亚洲国产经典 | 噜噜噜噜私人影院 | 在线观视频免费观看 | 天天色棕合合合合合合合 | 国产精品视屏 | 日韩av中文在线 | 草草影院在线播放 | 午夜淫片 | 精品国产乱码久久久久久浪潮 | 中出在线播放 | 成人欧美精品一区二区 | 午夜亚洲AV永久无码精品蜜芽 | 岛国av在线 | 中文字幕日韩经典 | 国产日韩欧美一二三区 | 久久久综合网 | 天天婷婷 | 黄色综合网 | 日本爱爱免费视频 | 黄色三级在线视频 | 国产亚洲精品熟女国产成人 | 男人操女人动态图 | 丁香花完整视频在线观看 | 一区二区啪啪啪 | 中文字幕不卡av | 国产亚洲精品久久久久久久久动漫 | 国产美女免费视频 | 特黄三级又爽又粗又大 | 水密桃av | 穿越异世荒淫h啪肉np文 | jzzjzz日本丰满少妇 | 亚洲天堂婷婷 | 亚洲啪av永久无码精品放毛片 | 日韩欧美中文字幕一区二区三区 | 精品久久999| 亚洲yy | 亚洲国产精品成人综合久久久 | 国产又粗又黄又爽 | 亚洲69av| 国产高清成人 | 欧美日韩中文字幕在线观看 | 亚洲一区二区三区四区在线观看 | 日韩在线中文 | 亚洲欧美另类在线视频 | 国产又粗又长又硬免费视频 | 色视频在线观看 | 青青草毛片 | 老太太av| 亚洲色图 校园春色 | 久久精品一区二区 | 欧美日韩在线高清 | 人人澡人人射 | 一本色道久久88亚洲精品综合 | 激情欧美亚洲 | 男女啪啪av| 欧美一级免费大片 | 国产网红女主播精品视频 | 四虎永久在线观看 | 久久久中文网 | 丝袜性爱视频 | 久在线播放 | 成人深夜在线 | 免费视频www在线观看网站 | youjizz在线视频 | 日韩美女久久 | 少妇又紧又深又湿又爽视频 | 五月天久久久 | japanese av在线| 男女做那个的全过程 | 青草99| 日韩精品色呦呦 | 人人爽人人插 | 亚洲欧美国产一区二区 | 丰满少妇一区二区 | 欧美性生活xxx | 国产精品美女视频 | 先锋av资源网站 |