js通過var定義全局變量與在window對象上直接定義屬性的區(qū)別說明
js var定義全局變量與在window對象上直接定義屬性區(qū)別
關于window
一、所有 JavaScript 全局對象、函數以及變量均自動成為 window 對象的成員。
二、全局變量是 window 對象的屬性。
三、全局函數是 window 對象的方法。
所有在全局作用域中聲明的變量、函數都會變成window對象的屬性和方法。如:
var name = "xiaomi"; console.log(window.name);//"xiaomi"
區(qū)別一
全局變量不能通過delete刪除,而window屬性上定義的變量可以通過delete刪除:
var num1=123; window.num2=456; delete num1; delete num2; console.log(num1); ?//123 console.log(num2); ?//num2 is not defined
全局變量num1之所以不能通過delete刪除,是因為通過var語句添加的全局變量有一個configurable屬性,其默認值為false,如下,所以這樣定義的屬性不可以通過delete刪除。
var num1=123;
window.num2=456;
Object.getOwnPropertyDescriptor(window, "num1");
//Object {value: 123, writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, 'num2');
//Object {value: 456, writable: true, enumerable: true, configurable: true}區(qū)別二
嘗試訪問未聲明的變量會報錯,xxx is not defined。
但是通過查詢window查詢,可以知道某個可能未聲明的變量是否存在,不會報錯,只會顯示undefined。
console.log(num1); // undefined var num1=123; console.log(num2); // ReferenceError: a is not defined window.num2=456;
這一點可以用預編譯解釋,var聲明的變量會提升聲明到頂部。
區(qū)別三
在函數中使用var定義的變量是局部變量。
有時想要在外部也訪問到函數里面的變量,就需要定義window對象屬性。
function () {
?? ?var num1 = 123;
?? ?window.num2 = 456;
}
console.log(num1); //num1 is not defined
console.log(num2); //456js中定義的全局變量,局部變量
關于變量和參數問題
var a ?= 2; //全局變量?
function func()
{
? ? var a = 1; ?//局部變量? ??
? ? ?a = 2; ? ? //全局變量?
}函數外面定義的變量是全局變量,函數內可以直接使用。
在函數內部沒有使用var定義的=變量則為全局變量,
*在函數內使用var關鍵字定義的變量是局部變量,即出了函數外邊無法獲取。
js函數定義的參數沒有默認值,(形參的默認值在之前只有新版火狐支持,目前新版的chrome瀏覽器也可以支持)
JS中聲明全局變量主要分為顯式聲明或者隱式聲明下面分別介紹。
聲明方式一:
使用var(關鍵字)+變量名(標識符)的方式在function外部聲明,即為全局變量,否則在function聲明的是局部變量。該方式即為顯式聲明詳細如下:
? var test = 5;//全局變量?
? function a(){?
? ? var a = 3;//局部變量?
? ? alert(a);?
? }?
? function b(){?
? ? alert(test);?
? }?
? //a();//調用a方法,那么方法里面的內容才會執(zhí)行?
? //b();//同上?聲明方式二:
沒有使用var,直接給標識符test賦值,這樣會隱式的聲明了全局變量test。即使該語句是在一個function內,當該function被執(zhí)行后test變成了全局變量。
? ? test = 5;//全局變量?
? ? function a(){?
? ? ? aa = 3;//也是全局變量?
? ? ? alert(test);?
? ? }?
? ? //a(); ?//輸出5?
? ? //alert(aa);//這里也可以方法a()方法里面的變量,因為aa是全局變量?聲明方式三:
使用window全局對象來聲明,全局對象的屬性對應也是全局變量,詳細如下:
<script>? ? window.test = 50;? ? alert(test);//輸出50? </script>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JavaScript實現(xiàn)動態(tài)刪除列表框值的方法
這篇文章主要介紹了JavaScript實現(xiàn)動態(tài)刪除列表框值的方法,涉及javascript針對select列表框的遍歷與刪除操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
微信小程序swiper組件實現(xiàn)抖音翻頁切換視頻功能的實例代碼
這篇文章主要介紹了微信小程序swiper組件實現(xiàn)抖音翻頁切換視頻功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
antd組件Upload實現(xiàn)自己上傳的實現(xiàn)示例
這篇文章主要介紹了antd組件Upload實現(xiàn)自己上傳的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

