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;
相關文章
相關標籤/搜索