亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個沒有理解面試題

一個沒有理解面試題

肥皂起泡泡 2018-08-01 12:23:24
 var tt = 'aa';     function test(){        alert(tt);               var tt = 'dd';        alert(tt);            }      test();為什么第一個彈出undifine呢?又: var tt = 'aa'; function test(){   alert(tt);     //var tt = 'dd';   //alert(tt);         }    test();彈出aa?求各位大神解答下
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

這樣是全局的:

var tt = 'aa';function test() {
    alert(tt);
}test();

這是你的例子:

var tt = 'aa';function test() {
    alert(tt);    
    var tt = 'dd';
    alert(tt);
}
test();

在函數內部使用var聲明變量,是局部的。優先級高于函數外部的全局變量。
這個說明js解釋器的解析順序,盡管你的alert(tt)var tt = 'dd'前面,但是它還是認為你是在內部定義了一個局部變量。

function test() {    
var tt;
    alert(tt);
    tt = 'dd';
    alert(tt);
}


查看完整回答
反對 回復 2018-08-04
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

這題總結下來就2點知識:
1. 聲明提升
2. 作用域鏈

先說后者,js在訪問一個變量時會優先在該作用域(訪問時的那個作用域)內尋找是否聲明過該變量,如果該變量已經存在,則直接使用它的值,否則它會尋找該作用域的‘父作用域/上級作用域’,以此類推,直到找到全局作用域為止。

關于聲明提升是指:js在解析的時候總是會將varfunction這類關鍵詞的聲明語句提升至該作用域的最頂部(注意:這里只會提升聲明部分)。

于是你那段代碼等價于下面

var tt = 'aa';   

function test(){    
      var tt; //這個tt未被賦值,按js的‘規矩’,它的值是`undefined`
    alert(tt);
    tt = 'dd';
    alert(tt);    
}   

test();

所以執行的時候返回的是 undefined 和 dd.


查看完整回答
反對 回復 2018-08-04
  • 2 回答
  • 0 關注
  • 1089 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號