js作用域(scope)的面试题

409 阅读1分钟

js作用域(scope)的面试题

var n = 100

function foo() {
  n = 200
}

foo()

console.log(n)

function foo() {
  console.log(n)
  var n = 200
  console.log(n)
}

var n = 100
foo()

var a = 100

function foo() {
  console.log(a)
  return
  var a = 200
}

foo()

function foo() {
  m = 100 // 没有var来定义,但 line7 打印出100. 没有var等认为m定义在GO(全局)中.
}

foo()

console.log(m)

function foo() {
  var a = b = 10
  // => 转成下面的两行代码
  // var a = 10
  // b = 10          //执行顺序 先给b赋值,再给a赋值 从右向左
}

foo()

// console.log(a) // 报错,访问不了
console.log(b) // 10

参数的作用域(★★★)

var x = 0

// 当函数的参数有默认值时, 会形成一个新的作用域, 这个作用域用于保存参数的值
function foo(x, y = function() { x = 3; console.log(x) }) {
  console.log(x)
  var x = 2
  console.log(x)
  y()
  console.log(x)
}

foo()
console.log(x)

// 参数作用域
// x = undefined
// y = function(){ x = 3 }


// undefined
// 2
// 3
// 2
// 0

node/浏览器运行查看结果!