js的执行机制
遇到一个问题,因为自己本身就是菜鸟的原因,弄懂了还是很高兴的。
console.log(a) function a() { return "this is function" } var a = function() { return "this is not function" } var a = "test" // 这时候输出的是"this is function" console.log(b) var b = function() { return "this is not function" } function b() { return "this is function" } var b = "test1" // 这时候输出的是"this is function" (function(){ a = 5 console.log(window.a) var a = 10 console.log(a) })() // 输出undefined // 输出10
js的执行有预编译期和执行期,定义的函数会提升到全局环境,进行预编译,所以执行顺序在函数表达式之前,而变量在声明前调用是undefined,在自执行的函数内部相当于一个块级作用域,变量提升不会提升到全局环境