关于全局变量

全局变量是不是没有加var,就是全局变量?

还是说,如果在上层只要找到了定义过的同名变量,就不成为全局变量了?

小白理解的不透彻,请大佬帮忙解答一下

function a(){
    function b(){
        var aaa = 2;
        function c(){
            aaa = 5;
        }
    
    }

}

请问这个最内层的aaa = 5 aaa 没加var 是不是就马上成为了全局变量 , 还是说他的父函数声明了, 就不是全局变量了?

阅读 1.9k
2 个回答

这个话题……不是一两句说的清楚的。全局变量涉及到 var'use strict;、闭包等很多条件,建议题主好好看一本书,比如犀牛书、《JavaScript 高级程序设计》等。

但就问题里的描述来看,c 里面的 aaa 因为处于 b 的闭包中,所以是局部变量,也就是 b 里声明的。

我给你举一个例子吧,例如在一个 script 标签里,或者是一个 js 文件中。


var a_1 = 6 // 这样的,直接在最外层声明的变量,是全局变量

(function fn_1 () {
    var a_2 = 7 // 在函数内层声明的变量,是属于这个函数的局部变量
    a_3 = 8 // 如果在函数作用域内没有用 var 关键字声明的变量,会被自动声明为全局变量
}())

// 上面这段代码中,a_1 和 a_3 是全局变量,a_2 是局部变量

还有一种情况是严格模式

// 文件开头这样写,会进入严格模式
'use strict'

var a_1 = 6 
(function fn_1 () {
    var a_2 = 7 
    a_3 = 8 // 同样的代码,在严格模式下这样声明变量会报错,a_3 is not defined
}())

推荐去看一下 《js高级程序设计》,里面讲的很详细

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题