// 允许在块级作用域内声明函数 // 函数声明会提升到全局作用域或函数作用域头部 还会提升到所在的块级作用域的头部 function f(){ console.log('你是猪吗'); } (function(){ var f = undefined; if(false){ function f(){ console.log('我是猪吗'); } } f() }()) //输出f()不是一个函数 //ES6的块级作用域必须有{},若无 则js引擎就认为不存在块级作用域 //严格模式下 函数的声明也必须在当前作用域的顶层 'use strict' if(true){ function f(){} }//不报错 // 报错写法如下 'use strict' if(true) function f(){}