嗨!我是前端小M~~

作用域

作用(有效)域(区域,范围)变量生效的范围
  • 全局作用域 :书写位置在全局,没有被任何函数{ }括起来,任何地方都能被访问
  • 函数作用域:在函数声明时产生函数作用域,全局作用下无法访问函数内部变量,函数作用域可以访问全局变量,若全局函数中存在与函数作用域相同名字的变量,就近原则
  • 块级{ }作用域:块级作用域 let const { }暂时性死区,作用域外访问不到
for (let i = 0; i < 3; i++) {                      for (var i = 0; i < 3; i++) {
   console.log(i);    // 0 1 2                      console.log(i);   //0 1 2
}                                                   }
console.log(i);    //  i is not defined               console.log(i);  //3
  • eval( )忽略不计

函数提升

 

1)声明式函数存在提升(只提升声明)
console.log(a); //Cannot access 'a' before initialization    console.log(a);
let a = 5;                                                    var a = 5;
2)函数是一等公民,函数提升在变量提升之前,出现重名,被覆盖 无效
let test = 5;                                        function test(){
function test(){                                     console.log(`heihei`);
    console.log(`heihei`);                           }
}                                                    let test = 5;
console.log(test);       //5       ====变量提升=====>  console.log(test); //5
console.log(typeof test);//num                        console.log(typeof test);//num
test();                 //未声明                       5();//???
3) 变量使用前一定要声明,否则为全局变量

在函数中获取另一个函数的值

1.局部变量赋值给全局
let b = 2;        //被a赋值为1
let fn1 = function (){
   let a = 1;   //局部
   b=a;     //局部变量赋值给全局
}
let fn2 = function (){
    console.log(b);  //1
}
fn1();
fn2();
2.以形参的形式传递
let fn1 = function () {
    let a = 1;
    fn2(a);
}
let fn2 = function (x) {
    console.log(x);  //1
}
fn1();
3.以返回值的形式传递
let fn1 = function () {
    let a = 1;
    return a;  //1
}
let result = fn1();//1
let fn2 = function () {
    console.log(result);//1
}
fn2();