1. 程式人生 > >一言難盡的js變量提升面試題

一言難盡的js變量提升面試題

未定義 onclick mar bar nor htm 復制代碼 搜索 作用域

在這個課題開始之前我們先做一些基礎知識的講解

1、在頂級的區域內聲明的變量為 window級別的變量。 也就是說var a=100 等價於 window.a=100;

2、局部的重新聲明變量沒有意義。var a=100;var a;後面的將沒有意義。

3、在有參數函數的定義中 function abc(p1){} abc(1),在函數執行中,先構建,在執行,會有兩個步驟,所以說當函數執行之前構建過程中,將臨時生成代碼 var p1=1;將來一切不賦值的聲明將變得沒有意義。

var p1;//沒有意義

var p1=2;//有意義。

開始進入正題

全局作用域和局部作用域

全局作用域:整個JS執行環境

局部作用域:通過創建一個函數就開辟出了一個局部作用域

全局變量和 局部變量

全局變量:在全局作用域都可以訪問的變量

局部變量:只能在當前局部作用域訪問的

變量聲明提升:

如果變量聲明在函數裏面,則將變量聲明提升到函數的開頭

如果變量聲明是一個全局變量,則將變量聲明提升到全局作用域的開頭

變量運行(搜索)機制:

首先看,有沒有局部作用域

如果有,查找是不是這個局部作用域定義的變量

如果不是,尋找上一級作用域,直到找到全局作用域

如果全局作用域也找不到這個變量,這個變量就是未定義的 undefined

第一題:

技術分享圖片
var a=1;
function test(){
    console.log(a);
    var a=1;
}
test();
技術分享圖片

根據變量聲明提升和變量搜索機制,函數test()應為

技術分享圖片
function test(){
    var a;
    console.log(a);//此時由於a並咩有被賦值,所以也就是undefined
        a=1;


在這個課題開始之前我們先做一些基礎知識的講解


1、在頂級的區域內聲明的變量為 window級別的變量。 也就是說var a=100 等價於 window.a=100;


2、局部的重新聲明變量沒有意義。var a=100;var a;後面的將沒有意義。


3、在有參數函數的定義中 function abc(p1){} abc(1),在函數執行中,先構建,在執行,會有兩個步驟,所以說當函數執行之前構建過程中,將臨時生成代碼 var p1=1;將來一切不賦值的聲明將變得沒有意義。


var p1;//沒有意義


var p1=2;//有意義。



開始進入正題


全局作用域和局部作用域


全局作用域:整個JS執行環境


局部作用域:通過創建一個函數就開辟出了一個局部作用域



全局變量和 局部變量


全局變量:在全局作用域都可以訪問的變量


局部變量:只能在當前局部作用域訪問的



變量聲明提升:


如果變量聲明在函數裏面,則將變量聲明提升到函數的開頭


如果變量聲明是一個全局變量,則將變量聲明提升到全局作用域的開頭



變量運行(搜索)機制:


首先看,有沒有局部作用域


如果有,查找是不是這個局部作用域定義的變量


如果不是,尋找上一級作用域,直到找到全局作用域


如果全局作用域也找不到這個變量,這個變量就是未定義的 undefined



第一題:



技術分享圖片
var a=1;
function test(){
    console.log(a);
    var a=1;
}
test();
技術分享圖片

根據變量聲明提升和變量搜索機制,函數test()應為



技術分享圖片
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html
https://baobao.baidu.com/article/ccd93806c747710850bf0888cdfdce38.html


一言難盡的js變量提升面試題