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

javascript 顯示全局變量與隱式全局變量的區(qū)別

 更新時間:2017年02月09日 12:20:23   投稿:mdxy-dxy  
這篇文章主要介紹了javascript 顯示全局變量與隱式全局變量的區(qū)別,需要的朋友可以參考下

在JavaScript中,全局變量有兩種聲明方式

  • 使用 var 顯示聲明的全局變量

  • 不使用 var 聲明的隱式全局變量

兩者的區(qū)別在于是否能通過 delete 操作符刪除

先看一段代碼

var a = 'a'; // 顯式聲明的全局變量
b = 'b'; // 隱式聲明的全局變量
 
console.log(a); // a
console.log(b); // b
console.log(window.a); // a
console.log(window.b); // b

在 js 中全局變量其實是global對象(window)的屬性,因此兩種方式聲明的全局變量都可以通過 window 拿到

嘗試用 delete 刪除

// 顯式聲明的全局變量不能被刪除
delete a; // 返回 false 
 
// 隱式聲明的全局變量可以被刪除
delete b; // 返回 true 
 
// 刪除情況
console.log(typeof a); // string
console.log(typeof b); // undefined

delete 操作符可以刪除一個對象的屬性,但如果屬性是一個不可配置(non-configurable)屬性,刪除時則會返回 false(嚴(yán)格模式下會拋出異常)

這就表示使用 var 聲明的變量是不可配置的,使用 getOwnPropertyDescriptor 來獲取描述屬性特性的對象來驗證這一點

Object.getOwnPropertyDescriptor(window, a); // {value: "a", writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, b); // {value: "b", writable: true, enumerable: true, configurable: true}

兩者的根本區(qū)別在于顯式聲明的變量不可配置,不能通過 delete 操作符刪除

需要注意的是 configurable 值一旦為 false,描述屬性特性的對象就不能被修改,因此不能通過修改屬性描述符使得顯示聲明的全局變量能被 delete 刪除,但反過來,可以使隱式聲明的全局變量也不能被 delete 刪除

b = 'b';
var descriptor = Object.getOwnPropertyDescriptor(window, b);
descriptor.configurable = false;
Object.defineProperty(window, b, descriptor);
delete b; // 返回 false 

以下是其他網(wǎng)友的補充

JavaScript之全局變量和隱式全局變量

隱式全局變量和明確定義的全局變量間有些小的差異,就是通過delete操作符讓變量未定義的能力。

1、通過var創(chuàng)建的全局變量(任何函數(shù)之外的程序中創(chuàng)建)是不能被刪除的。
2、無var創(chuàng)建的隱式全局變量(無視是否在函數(shù)中創(chuàng)建)是能被刪除的。

這表明,在技術(shù)上,隱式全局變量并不是真正的全局變量,但它們是全局對象的屬性。屬性是可以通過delete操作符刪除的,而變量是不能的:

// 定義三個全局變量
var global_var = 1;
global_novar = 2; // 反面教材
(function () {
  global_fromfunc = 3; // 反面教材
}());
 
// 試圖刪除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
 
// 測試該刪除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"

在瀏覽器中,全局對象可以通過window屬性在代碼的任何位置訪問(除非你做了些比較出格的事情,像是聲明了一個名為window的局部變量)。但是在其他環(huán)境下,這個方便的屬性可能被叫做其他什么東西(甚至在程序中不可用)。如果你需要在沒有硬編碼的window標(biāo)識符下訪問全局對象,你可以在任何層級的函數(shù)作用域中做如下操作:

var global = (function () {
  return this;
}());

這種方法可以隨時獲得全局對象,因為其在函數(shù)中被當(dāng)做函數(shù)調(diào)用了(不是通過new構(gòu)造),this總 是指向全局對象。實際上這個病不適用于ECMAScript 5嚴(yán)格模式,所以,在嚴(yán)格模式下時,你必須采取不同的形式。例如,你正在開發(fā)一個JavaScript庫,你可以將你的代碼包裹在一個即時函數(shù)中,然后從 全局作用域中,傳遞一個引用指向this作為你即時函數(shù)的參數(shù)。

以上就是javascript 顯示全局變量與隱式全局變量的區(qū)別,兩者的根本區(qū)別在于顯式聲明的變量不可配置,不能通過 delete 操作符刪除,希望大家多關(guān)注腳本之家的其他文章。

相關(guān)文章

  • JS+CSS實現(xiàn)閃爍字體效果代碼

    JS+CSS實現(xiàn)閃爍字體效果代碼

    這篇文章主要介紹了JS+CSS實現(xiàn)閃爍字體效果代碼,可實現(xiàn)文字按照指定顏色逐次閃爍顯示的功能,代碼非常簡單實用,需要的朋友可以參考下
    2016-04-04
  • js簡單正則驗證漢字英文及下劃線的方法

    js簡單正則驗證漢字英文及下劃線的方法

    這篇文章主要介紹了js簡單正則驗證漢字英文及下劃線的方法,結(jié)合完整實例形式分析了javascript針對中英文字母與下劃線的正則驗證方法,需要的朋友可以參考下
    2016-11-11
  • 使用JS中的exec()方法構(gòu)造正則表達(dá)式驗證

    使用JS中的exec()方法構(gòu)造正則表達(dá)式驗證

    這篇文章主要介紹了使用JS中的exec()方法構(gòu)造正則表達(dá)式驗證的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • JS簡單實現(xiàn)動畫彈出層效果

    JS簡單實現(xiàn)動畫彈出層效果

    本文給大家介紹的是是一款javascript彈出層特效,支持點擊觸發(fā)js彈出層,滑過觸發(fā)js彈出層,帶動畫效果js彈出層,可自定義函數(shù)回調(diào)js彈出層。
    2015-05-05
  • PHPExcel中的一些常用方法匯總

    PHPExcel中的一些常用方法匯總

    這篇文章主要介紹了PHPExcel中的一些常用方法匯總,本文直接給出操作代碼實例,代碼中對常用方法給出了注釋,需要的朋友可以參考下
    2015-01-01
  • WebSocket中心跳檢測與斷開重連機制詳解

    WebSocket中心跳檢測與斷開重連機制詳解

    心跳檢測是指在WebSocket連接過程中定時向服務(wù)端發(fā)送和接收心跳消息,來確定當(dāng)前連接是否是正常狀態(tài)的檢測機制,斷開重連是指在WebSocket不正常斷開連接后,進(jìn)行重新連接的策略,下面我們就來看看這二者的具體實現(xiàn)吧
    2024-01-01
  • 基于js文件加載優(yōu)化(詳解)

    基于js文件加載優(yōu)化(詳解)

    下面小編就為大家分享一篇基于js文件加載優(yōu)化(詳解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • ES6字符串的擴展實例

    ES6字符串的擴展實例

    這篇文章主要介紹了ES6字符串的擴展實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 第六章之輔組類與響應(yīng)式工具

    第六章之輔組類與響應(yīng)式工具

    Bootstrap,來自 Twitter,是目前最受歡迎的前端框架。本文給大家介紹BootStrap組件之輔組類與響應(yīng)式工具,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • H5+css3+js搭建帶驗證碼的登錄頁面

    H5+css3+js搭建帶驗證碼的登錄頁面

    這篇文章主要為大家詳細(xì)介紹了H5+css3+js搭建帶驗證碼的登錄頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論

呈贡县| 高要市| 赤城县| 安溪县| 南乐县| 布拖县| 随州市| 富源县| 华亭县| 浮梁县| 邢台市| 赤城县| 依安县| 阜宁县| 周宁县| 光泽县| 赣州市| 海口市| 西林县| 永胜县| 吉木乃县| 孟连| 达尔| 陆良县| 阿拉善右旗| 伊春市| 肥乡县| 铜川市| 清涧县| 郧西县| 延寿县| 施甸县| 乳山市| 包头市| 札达县| 鸡东县| 乡城县| 佳木斯市| 石泉县| 永安市| 浦北县|