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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js中加“var”和不加“var”的区别,看完觉得这么多年js白学了

發布時間:2025/3/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js中加“var”和不加“var”的区别,看完觉得这么多年js白学了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Javascript聲明變量的時候,雖然用var關鍵字聲明和不用關鍵字聲明,很多時候運行并沒有問題,但是這兩種方式還是有區別的。可以正常運行的代碼并不代表是合適的代碼。

var num = 1;

是在當前域中聲明變量. 如果在方法中聲明,則為局部變量(local variable);如果是在全局域中聲明,則為全局變量。

而 num = 1;

事實上是對屬性賦值操作。首先,它會嘗試在當前作用域鏈(如在方法中聲明,則當前作用域鏈代表全局作用域和方法局部作用域etc。。。)中解析 num; 如果在任何當前作用域鏈中找到num,則會執行對num屬性賦值; 如果沒有找到num,它才會在全局對象(即當前作用域鏈的最頂層對象,如window對象)中創造num屬性并賦值。

注意!它并不是聲明了一個全局變量,而是創建了一個全局對象的屬性。

即便如此,可能你還是很難明白“變量聲明”跟“創建對象屬性”在這里的區別。事實上,Javascript的變量聲明、創建屬性以及每個Javascript中的每個屬性都有一定的標志說明它們的屬性----如只讀(ReadOnly)不可枚舉(DontEnum)不可刪除(DontDelete)等等。

由于變量聲明自帶不可刪除屬性,比較var num = 1 跟 num = 1,前者是變量聲明,帶不可刪除屬性,因此無法被刪除;后者為全局變量的一個屬性,因此可以從全局變量中刪除。

具體見以下代碼:

?

復制代碼代碼如下:
// num1為全局變量,num2為window的一個屬性

?

???????????????????? var num1 = 1;

???????????????????? num2 = 2;

???????????????????? // delete num1;? 無法刪除

???????????????????? // delete num2;? 刪除

???????????????????? function model(){

??????????????????????????? var num1 = 1; // 本地變量

??????????????????????????? num2 = 2;???? // window的屬性

??????????????????????????? // 匿名函數

??????????????????????????? (function(){

?????????????????????????????????? var num = 1; // 本地變量

?????????????????????????????????? num1 = 2; // 繼承作用域(閉包)

?????????????????????????????????? num3 = 3; // window的屬性

??????????????????????????? }())

???????????????????? }

?

PS. 在ECMAScript5標準中,有一種“嚴格模式”(Strict Mode)。在嚴格模式中,為未聲明的標識符賦值將會拋引用錯誤,因此可以防止意外的全局變量屬性的創造。目前一些瀏覽器的新版本已經支持。

轉載于:https://www.cnblogs.com/liuna/p/6140901.html

總結

以上是生活随笔為你收集整理的js中加“var”和不加“var”的区别,看完觉得这么多年js白学了的全部內容,希望文章能夠幫你解決所遇到的問題。

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