JavaScript学习笔记: 局部变量和全局变量

特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: 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中变量是局部变量还是全局变量,那就必须要先理解变量作用域链。要理解这个就得先整明白

剩余80%内容付费后可查看

如需转载,烦请注明出处:https://www.w3cplus.com/javascript/the-basics-of-variable-scope-in-javascript.html

如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!

赏杯咖啡,鼓励他创作更多优质内容!
返回顶部