var b = 10; (function b(){ // 'use strict' b = 20 console.log(b) })()
- 非匿名立即执行函数,函数名不可以修改,严格模式下会TypeError
- 非严格模式下,不报错,修改也没有用。
- 查找变量b时,立即执行函数会有内部作用域,会先去查找是否有b变量的声明,有的话,直接赋值
- 确实发现具名函数function b(){} 所以就拿来做b的值
- IIFE函数内部无法进行赋值(类似于const),应该是非匿名立即执行函数无法进行重新赋值
var b = 10; (function b(){ var b = 20 console.log(window.b) console.log(b) })()
var b = 10; (function b(){ console.log(b) b = 5 console.log(window.b) var b = 20 console.log(b) })()