1

;(function () {
  var x = (y = 1)
})()
var z
 
console.log(y)
console.log(z)
console.log(x)
1
undefined
报错

考点:

  • 函数内声明的变量是局部变量
  • 没有使用 var 声明的变量是一个全局变量

2

var a, b
;(function () {
  console.log(a)
  console.log(b)
  var a = (b = 3)
  console.log(a)
  console.log(b)
})()
console.log(a)
console.log(b)
undefined
undefined
3
3
undefined
3

考点:

  • 没有使用 var 声明的变量是一个全局变量

3

var friendName = "World"
;(function () {
  if (typeof friendName === "undefined") {
    var friendName = "Jack"
    console.log("Goodbye " + friendName)
  } else {
    console.log("Hello " + friendName)
  }
})()
Goodbye Jack

考点:

  • 变量提升

4

function fn1() {
  console.log("fn1")
}
var fn2
 
fn1()
fn2()
 
fn2 = function () {
  console.log("fn2")
}
 
fn2()
fn1
报错
fn2

考点

  • 变量提升

5

function a() {
  var temp = 10
  function b() {
    console.log(temp)
  }
  b()
}
a()
 
function a() {
  var temp = 10
  b()
}
function b() {
  console.log(temp)
}
a()
10
报错

6

var a = 3
function c() {
  alert(a)
}
;(function () {
  var a = 4
  c()
})()
3

7

function fun(n, o) {
  console.log(o)
  return {
    fun: function (m) {
      return fun(m, n)
    },
  }
}
var a = fun(0)
a.fun(1)
a.fun(2)
a.fun(3)
var b = fun(0).fun(1).fun(2).fun(3)
var c = fun(0).fun(1)
c.fun(2)
c.fun(3)
undefined
0
0
0
undefined
0
1
2
undfined
0
1
1

8

f = function () {
  return true
}
g = function () {
  return false
}
;(function () {
  if (g() && [] == ![]) {
    f = function f() {
      return false
    }
    function g() {
      return true
    }
  }
})()
console.log(f())
false