练习1
下列程序的执行结果 :
if(true){
function demo() {
console.log("hello demo1");
}
}else{
function demo() {
console.log("hello demo2");
}
}
demo(); // 高级hello demo1 低级hello demo2
/*
function demo() {
console.log("hello demo1");
}
function demo() {
console.log("hello demo2");
}
if(true){}else{}
demo();
*/
- 在ES6之前没有块级作用域, 并且没有将这两个函数定义到其它的函数中,
- 所以这两个函数应该属于全局作用域
注意点 : - 在高级浏览器中, 不会对{}中定义的函数进行提升
- 只有在低级浏览器中, 才会按照正常的方式解析
练习2
如果变量名称和函数名称同名, 那么函数的优先级高于变量
console.log(value); // 会输出函数的定义
var value = 123;
function value() {
console.log("fn value");
}
console.log(value); // 123
/*
function value() {
console.log("fn value");
}
console.log(value);
var value;
value = 123;
console.log(value);
*/