变量提升题目:
(function(){ a=5 console.log(window.a) var a=10 console.log(a) })()
答案如下(还请先思考哦)
//编译后 (function(){ var a; a=5; console.log(window.a) //undefined a=10; console.log(a) //10 })()
函数提升题目:
function test(){ console.log(1,foo); console.log(2,bar); var foo='hello' console.log(3,foo); var bar =function(){ return 'world' } function foo(){ return 'hello' } } test()
答案如下:
//编译后
//函数提升优先级大于变量提升
function test(){ function foo(){ return 'hello' } var foo; var bar; console.log(1,foo); //foo(){ } console.log(2,bar); //undefined foo='hello' console.log(3,foo); //hello bar =function(){ return 'world' } } test()
总结:
1.对于用var声明的变量,声明会提升到其所在作用域的顶端,但赋值操作不会提升。
2.函数声明同样也会提升,这里仅限于函数声明,并不包含函数表达式。
3.如果变量名和函数名一样的话,函数提升优先级高于变量提升。
4.如果存在两个函数声明,则先出现的声明先提升,后出现的声明后提升,函数名相同的时候,后提升的会覆盖先提升的。