1. 程式人生 > 實用技巧 >JS基礎--函式作用域

JS基礎--函式作用域

嗨!我是前端小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();