我对js作用域的理解

提到js的作用域,我的习惯就是。先看代码

var my=function(){
    var s=3;
}
console.log(s)

这段代码的执行结果是什么? 
会不会有人觉得结果是 3 呢? 但是,结果是ReferenceError: s is not defined 。原因在于,变量 s 
是定义在函数my()的内部的,因此。在全局作用域中,无法打印出来

如果我们把代码改成

var s=3;
console.log(s)    // 3

这样子就会打印出 3 了,因为他们是在同一个环境下的。都是在全局作用域下面。

或者把代码改成这个样子

function my(){
    var s=3;
    console.log(s)
}
my()  //3

这样子也会打印出3,他们仍然在同一个环境执行,只不过不是在全局环境,而是在函数my()的环境

关于js的作用域的问题,不考虑es6的情况之下,只有函数作用域和全局作用域,如果我们没有声明函数,那么这就是在全局作用域之下

原文地址:https://www.cnblogs.com/yiyistar/p/6641176.html