真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

為濱海等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及濱海網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、濱海網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

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

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

兩者的區(qū)別在于是否能通過(guò) 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 中全局變量其實(shí)是global對(duì)象(window)的屬性,因此兩種方式聲明的全局變量都可以通過(guò) window 拿到

嘗試用 delete 刪除

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

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

這就表示使用 var 聲明的變量是不可配置的,使用 getOwnPropertyDescriptor 來(lái)獲取描述屬性特性的對(duì)象來(lái)驗(yàn)證這一點(diǎn)

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ū)別在于顯式聲明的變量不可配置,不能通過(guò) delete 操作符刪除

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

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

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

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

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

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

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

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

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

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

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

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


網(wǎng)頁(yè)題目:javascript顯示全局變量與隱式全局變量的區(qū)別
文章轉(zhuǎn)載:http://weahome.cn/article/gjpdcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部