js面试总结

<div id="app">
    <button onClick="app()">点击1</button>
    <button onClick="app1()">点击2</button>
</div>

<script>
function app () {
  console.log(this);
}
function app1 () {
    app();
}
app();

</script>

非严格模式下,打印window;   [object Window],  

严格模式下,打印undefined

    app1();
    function app1(){
    }
    app1();
    function app1(){
        var i =3;
        console.log(i);
    }
    function app1(){
        var i =2;
        console.log(i);
    }

输出如下:

2

2

解释:后面的函数会覆盖前面的,所以执行最后一个函数。

console.log(a);  //undefined
var a = 3;
console.log(a);  //function a()
function a(){};

由此可知为什么输出的是函数a。拓展一下:

var a;
function a(){};
console.log(a);  //function a()
var a = 3;
function a(){};
console.log(a);  //3

同一个标识符的情况下,变量声明与函数声明都会提升;函数声明会覆盖变量声明,但不会覆盖变量赋值,即:如果声明变量的同时初始化或赋值那么变量优先级高于函数。

a=10;
console.log(a);
var a = 3;
function a(){}

1)函数声明会置顶
2)变量声明也会置顶
3)函数声明比变量声明更置顶:)
4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
5)声明过的变量不会重复声明

按以上的规则
题主的代码等价为

function a(){}
var a;//实际无效
console.log(a);
a = 3;
原文地址:https://www.cnblogs.com/liuna/p/7384204.html