提到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的情况之下,只有函数作用域和全局作用域,如果我们没有声明函数,那么这就是在全局作用域之下