javascript 显示全局变量与隐式全局变量的区别
这篇文章主要介绍了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
在 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(严格模式下会抛出异常)
这就表示使用 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
以下是其他网友的补充
JavaScript之全局变量和隐式全局变量
隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。
1、通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
2、无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过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的局部变量)。但是在其他环境下,这个方便的属性可能被叫做其他什么东西(甚至在程序中不可用)。如果你需要在没有硬编码的window标识符下访问全局对象,你可以在任何层级的函数作用域中做如下操作:
var global = (function () { return this; }());
这种方法可以随时获得全局对象,因为其在函数中被当做函数调用了(不是通过new构造),this总 是指向全局对象。实际上这个病不适用于ECMAScript 5严格模式,所以,在严格模式下时,你必须采取不同的形式。例如,你正在开发一个JavaScript库,你可以将你的代码包裹在一个即时函数中,然后从 全局作用域中,传递一个引用指向this作为你即时函数的参数。
以上就是javascript 显示全局变量与隐式全局变量的区别,两者的根本区别在于显式声明的变量不可配置,不能通过 delete 操作符删除
更多javascript 显示全局变量与隐式全局变量的区别相关文章请关注PHP中文网!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Perbezaan antara pembolehubah tempatan C++ dan pembolehubah global: Keterlihatan: Pembolehubah setempat dihadkan kepada fungsi penentu, manakala pembolehubah global boleh dilihat sepanjang program. Peruntukan memori: pembolehubah tempatan diperuntukkan pada tindanan, manakala pembolehubah global diperuntukkan dalam kawasan data global. Skop: Pembolehubah tempatan berada dalam fungsi, manakala pembolehubah global berada di seluruh program. Permulaan: Pembolehubah tempatan dimulakan apabila fungsi dipanggil, manakala pembolehubah global dimulakan apabila program bermula. Rekreasi: Pembolehubah tempatan dicipta semula pada setiap panggilan fungsi, manakala pembolehubah global dibuat hanya apabila program bermula.

request的中文意思为“请求”,是php中的一个全局变量,是一个包含了“$_POST”、“$_GET”和“$_COOKIE”的数组。“$_REQUEST”变量可以获取POST或GET方式提交的数据、COOKIE信息。

Bahasa pergi tidak mempunyai pembolehubah global statik Ia menggunakan cara yang lebih fleksibel untuk mengendalikan keperluan pembolehubah global biasanya diisytiharkan pada tahap pakej, iaitu pembolehubah yang diisytiharkan di luar fungsi ini . boleh dilihat dan boleh digunakan dalam mana-mana fungsi dalam pakej.

Apabila JavaScript menjadi lebih popular, semakin banyak tapak web dan aplikasi bergantung pada JavaScript. Walau bagaimanapun, penggunaan pembolehubah global dalam JavaScript boleh mempunyai masalah keselamatan. Dalam artikel ini, saya akan memperkenalkan cara melaksanakan keselamatan pembolehubah global dalam JavaScript. Cara terbaik untuk mengelak daripada menggunakan pembolehubah global ialah mengelak daripada menggunakan pembolehubah global. Dalam JavaScript, semua pembolehubah adalah global secara lalai melainkan ia diisytiharkan dalam fungsi. Oleh itu, pembolehubah tempatan harus digunakan apabila boleh

Golang ialah bahasa pengaturcaraan yang ditaip kuat dengan ciri-ciri kecekapan, kesederhanaan, dan keselarasan, jadi ia secara beransur-ansur digemari oleh semakin ramai pembangun. Dalam pembangunan Golang, pembolehubah global dan pembolehubah tempatan fungsi sering melibatkan isu persaingan data. Artikel ini akan menganalisis masalah persaingan data pembolehubah global dan pembolehubah tempatan dalam fungsi Golang dari perspektif pengekodan sebenar. 1. Persaingan data untuk pembolehubah global Pembolehubah global Golang boleh diakses dalam semua fungsi, jadi jika reka bentuk dan pengekodan yang ketat tidak dijalankan

Kita akan melihat bagaimana C dan C++ berkelakuan berbeza apabila mengisytiharkan semula pembolehubah global tanpa permulaan, mengisytiharkan semula pembolehubah global dengan permulaan, dan mengisytiharkan semula pembolehubah global dan memulakannya dua kali. Selain itu, kami akan mengulangi gabungan di atas menggunakan pembolehubah tempatan. 1.A) Program C: Isytiharkan semula pembolehubah global tanpa permulaan #include<stdio.h>intvar;intvar;intmain(){ printf("Var=%d",var return0;} output Var=0B) C++ program:

Ya, fungsi Go dalam Goroutine mempunyai akses terus kepada pembolehubah global secara lalai. Sebab: Goroutine mewarisi ruang memori Goroutine yang menciptanya, termasuk akses kepada pembolehubah global.

Pembolehubah global PHP termasuk: 1. $_SERVER, pembolehubah super global untuk pelayan dan maklumat persekitaran pelaksanaan skrip semasa 2. $_GET, susunan pembolehubah bersekutu yang dihantar ke skrip semasa melalui kaedah GET; , melalui kaedah POST Tatasusunan pembolehubah bersekutu yang dihantar ke skrip semasa 4. $_SESSION, yang menyimpan maklumat berkaitan pengguna dalam sesi semasa 5. $_COOKIE, tatasusunan pembolehubah bersekutu yang dihantar ke skrip semasa melalui Kuki HTTP; ; 6. $_FILES, dsb.
