1.delete的用法:删除对象的属性,不能直接删除变量和原型链中的变量
2.变量提升和函数提升
js引擎在正式执行之前会进行一次预编译,将变量声明和函数声明提升至当前作用域的最顶端,其他代码的执行顺序不变。(函数提升优于变量提升,函数提升的本质可以理解为变量提升,即function a(){}可以理解为var a;a=function a(){})
预编译之后相当于
function hoistFunction(){
var foo;
foo=function foo(){ }
console.log(foo); // foo=function foo(){ }
foo=5;
console.log(foo); //5
}
var foo;
foo=3;
hoistFunction();
console.log(foo); //3
3.let关键字
使用let关键字在全局作用域中声明的变量,不会成为Windows对象的属性,而var可以。
正确答案:依次输出 o,undefined