這篇文章主要介紹了javascript 顯示全域變數與隱式全域變數的差異,需要的朋友可以參考下
在JavaScript中,全域變數有兩種宣告方式
使用var 顯示宣告的全域變數
不使用var 宣告的隱式全域變數
兩者的差別在於是否能透過delete 運算元刪除
先看一段程式碼
var a = 'a'; // 显式声明的全局变量 b = 'b'; // 隐式声明的全局变量 console.log(a); // a console.log(b); // b console.log(window.a); // a console.log(window.b); // b(window)的屬性,因此兩種方式宣告的全域變數都可以透過window 拿到
嘗試用delete 刪除
// 显式声明的全局变量不能被删除 delete a; // 返回 false // 隐式声明的全局变量可以被删除 delete b; // 返回 true // 删除情况 console.log(typeof a); // string console.log(typeof b); // undefineddelete 運算符可以刪除一個物件的屬性,但如果屬性是物件的屬性,但如果屬性是物件的屬性不可配置(non-configurable)屬性,刪除時則會傳回false(嚴格模式下會拋出異常)這表示使用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}兩者的根本區別在於顯式宣告的變數不可配置,不能透過delete 運算子刪除需要注意的是configurable 值一旦為false,描述屬性特性的物件就不能被修改,因此不能透過修改屬性描述符使得顯示宣告的全域變數能被delete 刪除,但反過來,可以使隱式宣告的全域變數也不能被delete 刪除
b = 'b'; var descriptor = Object.getOwnPropertyDescriptor(window, b); descriptor.configurable = false; Object.defineProperty(window, b, descriptor); delete b; // 返回 false以下是其他網友的補充
// 定义三个全局变量 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"以下是其他網友的補充
JavaScript之全域變數和隱式全域變數隱式全域變數和明確定義的全域變數間有些小的差異,就是透過delete運算子讓變數未定義的能力。
1、透過var建立的全域變數(在任何函數以外的程式中建立)是不能被刪除的。
var global = (function () { return this; }());在瀏覽器中,全域物件可以透過window屬性在程式碼的任何位置存取(除非你做了些比較出格的事情,像是宣告了一個名為window的局部變數)。但是在其他環境下,這個方便的屬性可能被叫做其他什麼東西(甚至在程式中不可用)。如果你需要在沒有硬編碼的window標識符下存取全域對象,你可以在任何層級的函數作用域中做以下操作:
rrreee
這種方法可以隨時獲得全域對象,因為其在函數中被當做函數呼叫了(不是透過new構造),this總是指向全域物件。實際上這個病不適用於ECMAScript 5嚴格模式,所以,在嚴格模式下時,你必須採取不同的形式。例如,你正在開發一個JavaScript庫,你可以將你的程式碼包裹在一個即時函數中,然後從 全域作用域中,傳遞一個引用指向this作為你即時函數的參數。 以上就是javascript 顯示全域變數與隱式全域變數的差別,兩者的根本差別在於明確宣告的變數不可配置,不能透過delete 運算子刪除更多javascript 顯示全域變數與隱式全域變數的區別相關文章請關注PHP中文網! 🎜