JavaScript通过函数管理作用域。全局变量则会在下列情况下出现:
在任何地方不使用 var 声明变量,或者直接向未声明的变量赋值。
在函数外部使用 var 声明的变量。
以window. 形式声明的变量。
myglobal='hello';//反模式 console.log(myglobal);//"你好" console.log(window.myglobal);//"你好" console.log(window.['myglobal']);//"你好"
全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免。比方说,某个第三方脚本定义了一个全局变量,叫做result;接着,在你的函数中也定义一个名为result的全局变量。其结果就是后面的变量覆盖前面的。因此,要想和其他脚本成为好邻居的话,应该尽可能少的使用全局变量,并且始终使用var来声明变量。
一、函数内部不使用 var 声明变量
function sum(x, y) { // 不推荐写法: 隐式全局变量 result = x + y; return result; }
此段代码中的result没有声明。代码照样运作正常,但在调用函数后你最后的结果就多一个全局命名空间,这可以是一个问题的根源。
经验法则是始终使用var声明变量,正如改进版的sum()函数所演示的:
function sum(x, y) { var result = x + y; return result; }
二、使用任务链进行部分 var 声明
// 反例,勿使用 function foo() { var a = b = 0; // ... }
上面的片段中,a是本地变量但是b确实全局变量。
此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。换句话说,就好比你输入了:
var a = (b = 0);
如果你已经准备好声明变量,使用链分配是比较好的做法,不会产生任何意料之外的全局变量,如:
function foo() { var a, b; // ... a = b = 0; // 两个均局部变量 }
参考资料:《JavaScript模式》
相关推荐
看看有帮助,全局变量,与局部变量的差异!
JavaScript全局变量的本质及页面共享问题 -跨页面访问变量的问题
JavaScript全局变量的本质及页面共享问题 -页面
JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法
javascript全局变量封装模块的应用,本文将详细介绍,需要了解更多的朋友可以参考下
主要介绍了Javascript全局变量var与不var的区别。需要的朋友可以过来参考下,希望对大家有所帮助
JavaScript实现IFrame子窗口调用父窗口的全局变量
浅谈JavaScript的全局变量与局部变量_.docx
Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统...
在JavaScript中,全局变量有两种声明方式 使用 var 显示声明的全局变量 不使用 var 声明的隐式全局变量 两者的区别在于是否能通过 delete 操作符删除 先看一段代码 var a = 'a'; // 显式声明的全局变量 b = 'b'; //...
主要介绍了JavaScript防止全局变量污染的方法,结合实例形式较为详细的总结分析了JavaScript防止全局变量污染的常用操作技巧与注意事项,需要的朋友可以参考下
Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于Java、C和JavaScript之上,真的非常荣幸了. 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统...
该源码初步想法是缓存在客户端的JavaScript全局变量的信息,避免服务器得到过滤信息应用过滤器 JavaScript支持JSON格式,那么我们就需要模型转换为一个JSON模型,并将其存储在全局JavaScript变量。然后,用客户端...
本篇文章对JavaScript中声明全局变量的三种方式进行了详细的分析介绍。需要的朋友参考下
vue 之使用 scss 的全局变量
javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。 首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。当然,单单从字面上...
JavaScript进阶:JS的全局变量和全局函数.docx
1. 暗示全局变量 未声明的变量称为暗示全局变量。 var a = 1; //函数体外声明的变量称为全局变量 b = 2; // 无论函数体外或函数体内未声明的变量都称为暗示全局变量 function fn() { var c = 3; //函数体内声明的...