特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!或添加QQ:874472854(^_^)
JavaScript有两种变量:局部变量和全局变量。而这两个对于初学JavaScript的同学来说是一个较为麻烦的。非常容易搞错。我也看了好几天有关于这方面的教程,也还没完全整明白。今天把自己理解的记录下来,有不对之处,还请高手斧正。
在深入了解JavaScript中的局部变量和全局变量,我们必须要了解以下几个方面:
- 如何声明局部变量和全局变量
- JavaScript的变量作用域是基于特有的作用域链的
- JavaScript中没有块级作用域
- 函数中声明的变量在整个函数中都有定义
如何声明局部变量和全局变量
在JavaScript中,常常把定义在函数外的变量称为全局变量;而在函数内声明的变量称为局部变量。
来看一个例子:
var variable = 'global';
function checkVariable () {
var variable = 'local';
console.log(variable); // local
}
checkVariable();
console.log(variable); // global
上面的示例,在函数checkVariable()
外声明了一个全局变量variable
,同时在函数内声明了一个局部变量variable
。打个比方来说,把函数checkVariable()
当作一个容器,那么放在容器里的变量就是局部变量,而放在容器外的变量则是全局变量。当然,这也不是一尘不变的。为什么这么说呢?我们还是继续用代码来说话吧,因为代码比我更能阐述要说的一切:
variable = 'global';
function checkVariable() {
variable = 'local';
console.log(variable); // local
myVariable = 'local';
console.log(myVariable); // local
}
checkVariable();
console.log(variable); // local
console.log(myVariable); // local
对于我这样的初学者来说,我很多时候搞不清楚,为什么在函数外,variable
的值也变成了local
?为什么在函数体外可以访问myVariable
变量?
其实这两个问题都源于一个特性。在全局作用域中声明变量可以省略var
关键字,但如果在函数体内声明变量时不使用var
关键字,就会发生上面这样的现象。
另外,第一个示例告诉我们,在函数体内部,局部变量的优先级比同名的全局变量要高。那么在声明局部变量的函数体范围内,局部变量将覆盖同名的全局变量。
感觉有点啰嗦,不过还是做个小小总结:
声明局部变量一定要使用var
关键字,使用var
关键字声明变量时,变量会自动添加到距离最近的可用环境中。如果没有写var
, 变量就会暴露在全局上下文中, 这样很可能会和现有变量冲突. 另外, 如果没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到 Document
或者 Window
中, 所以务必用var
去声明变量。如果变量在未声明的情况下被初始化,该变量会自动添加到全局环境。
变量作用域链
如果要理解JavaScript中变量是局部变量还是全局变量,那就必须要先理解变量作用域链。要理解这个就得先整明白
如需转载,烦请注明出处:https://www.w3cplus.com/javascript/the-basics-of-variable-scope-in-javascript.html
如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!