JS作用域

58 阅读1分钟
  1. 除了函数外,js是没有块级作用域的
  2. 作用域链:内部可以访问外部的变量,但是外部不能访问内部的变量

注意:如果内部有,优先查找内部,如果内部没有就查找外部的

  1. 注意声明变量是用var还是没有写(window.)作用域是不一样的
  2. 注意:js有变量提升的机制【变量悬挂声明】
function fun() {
  var a = 10
  function foo() {
    console.log(a); // 输出 10
  }
}
fun();


function fun2() {
  var a = 10
  function foo() {
    var a = 20
    console.log(a); // 输出 20
  }
}
fun2();

// 自执行函数
(() => {
  var a = b = 10;
})()
console.log(b); // 输出 10,b没有声明相当于全局变量,b相当于window.b

做题时注意看:

  1. 本层作用域有没有此变量【注意变量提升】

  2. 注意:js除了函数外没有块级作用域

// 考题一:
function c() {
  var b = 1;
  function a() {
    console.log(b); // undefined,有 变量提升了
    var b = 2;
    console.log(b); // 2
  }
  a();
  console.log(b); // 1
}
c();
// 考题二
var name = 'a';
(function() {// 本层已经定义了name,相当于在这里声明了name即 var name;
  if(typeof name == 'undefined') {
    var name = 'b';
    console.log('111' + name);
  } else {
    console.log('222' + name);
  }
})()
输出:111b