作用域 块级作用域:用一个代码块限制变量的访问区域,js不支持 词法作用域:变量的作用范围,在定义的时候就已经决定,与运行时无关 即:它们在定义它们的作用域里执行,不在执行它们的作用域里执行 经典面试题: var num = 111; function fn1(){ console.log(num); } function fn2(){ var num = 222; fn1(); } fn2(); // 分析:函数在 定义 它的作用域中执行,不在 调用 它的作用域中执行 // 即:变量的作用范围在定义的时候就已经决定,域运行时无关 // fn2中调用了fn1,fn1在定义的位置执行,首先搜索本作用域中的num, // 没有,就到0级作用域中搜索,找到了num=111 作用域链 每个函数都会有一个作用域,如果函数被其他函数包裹,包裹的函数也有作用域,这样之一往上查找,就形成了一条作用域链 变量函数重名时 (function (a) { console.log(a); var a = 10; function a(){} }( 100 )); 思想1:变量和函数重名时,如果变量声明未赋值,则变量名被忽略,取函数 如果变量声明同时被赋值 1.如果在赋值之前用到了这个变量,获取到的是函数 2.如果在赋值之后用到了这个变量,获取到的是变量的值 思想2:形参的名字和函数体内 声明 的变量或方法的名字相同时,取函数体内声明的变量或方法 通过形参传进来的实参不起作用