简单理解
var zm = function (x) { var code = 'bb' return code };
学过js的老哥们都知道,当这样简单的一个函数进入浏览器,浏览器开始解释代码,会将window分两个模块:存储模块、执行模块。
存储模块,找到所有的var和function关键字,给这些变量添加内存地址
执行模块,代码从上到下执行,遇到变量就回去存储模块查找是否有该变量
如果有该变量,就看是否赋值,如果赋值了就是后面的值,没有赋值就是undefined
如果没找到 结果就是xxx is not defined
对于作用域可能对于部分人来说是难以理解的知识点,今天呢就列举5个知识点,只要记住这几句话,作用域对你来说就是小意思
一、“JavaScript中无块级作用域”
在Java或C#中存在块级作用域,即:大括号也是一个作用域。
public static void main (){ if(1==1){ String name = "seven"; } System.out.println(name); } // 报错
在JavaScript语言中无块级作用域
function Zhoumao() { if(1 == 1){ var name = '昼猫' } console.log(name); } Zhoumao()
// 输出:昼猫补充:标题之所以添加双引号是因为JavaScript6中新引入了 let 关键字,用于指定变量属于块级作用域。
二、JavaScript采用函数作用域
在JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。
function Zhoumao() { var name = '昼猫' } Zhoumao() console.log(name); // 报错:ReferenceError: name is not defined
三、JavaScript的作用域链
由于JavaScript中的每个函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链。
name = '昼猫'function

