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],  app

严格模式下,打印undefined函数

 

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

输出以下:this

2spa

2code

解释:后面的函数会覆盖前面的,因此执行最后一个函数。blog

 

 

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

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

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

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

 

 

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

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

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

function a(){}
var a;//实际无效
console.log(a);
a = 3;
相关文章
相关标签/搜索