作用域
块级作用域:用一个代码块限制变量的访问区域,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:形参的名字和函数体内 声明 的变量或方法的名字相同时,取函数体内声明的变量或方法
通过形参传进来的实参不起作用