function fun(){ // var str; 你看不到的,是js独有的机制
console.log(str); // undefined
var str = '你好吗?'
console.log(str); // 你好吗?
}
5.优先级:声明变量 > 声明普通函数 > 参数 > 变量提升
面试的时候怎么看:
1.本层作用域有没有此变量【注意变量提升】
2.注意:js除了函数外没有块级作用域
3.普通声明函数是不看写函数的顺序
考题1:
复制代码
function c(){
var b = 1;
function a(){ // 注意,此处有变量提升 var b;
console.log(b);
var b = 2;
console.log(b);
}
a();
console.log(b);
}
c();
-----------------
运行结果:
undefined
2
1
考题2:
复制代码
var name = 'a';
(function(){ // var name;
if(typeof name == 'undefined'){
var name = 'b';
console.log('111'+name);
}else{
console.log('222'+name);
}
})
-----------------
得到的结果都是: 111b
<script type="text/javascript"> // var a;
console.log(a);
if(false){
var a = 10;
}
console.log(a)
</script>
----------------------
undefined
undefined
考题3:
复制代码
var bar = 1;
function test(){ // var bar;
console.log(bar); // undefined
var bar = 2;
console.log(bar); // 2
}
test()
--------------------
undefined
2
考题4:
复制代码
function fun(a){
var a = 10;
function a(){}
console.log(a);
}
fun(100);