# ❓下面的代码打印什么内容,为什么?
var b = 10
;(function b() {
b = 20
console.log(b)
})()
1
2
3
4
5
2
3
4
5
首先打印的是
// [Function b]
var b = 10
;(function b() {
// 虽然这里是自执行函数
// 但是这里是 非匿名 所以说函数名是只读(类似 const 机制)的不可修改
// IIFE 内部作用域的 b 其实指向的是函数名字 b
b = 20
console.log(b)
})()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
我们在严格模式下面就会看到错误
var b = 10
;(function b() {
'use strict'
b = 20 // TypeError: Assignment to constant variable.
console.log(b)
})()
1
2
3
4
5
6
2
3
4
5
6
我们看看其他 🌰
var b = 10
;(function b() {
window.b = 20 // 带window指向
console.log(b) // [Function b] 依然是函数名字
console.log(window.b) // 20
})()
1
2
3
4
5
6
2
3
4
5
6
var b = 10
;(function b() {
var b = 20 // var声明 IIFE内部变量
console.log(b) // 20
console.log(window.b) // 10
})()
1
2
3
4
5
6
2
3
4
5
6