第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

JS里加var和不加的區(qū)別

JS里加var和不加的區(qū)別

慕哥6287543 2019-03-07 14:12:23
console.log(a); // undefinedconsole.log(b); // b 沒有聲明--------->這里報錯b = 10;var a = 20;***************************************console.log(a); // undefinedb = 10;console.log(b); // 10, 代碼執(zhí)行階段創(chuàng)建var a = 20;申明下這都是在非嚴格模式下進行的在全局上下文下,b為什么輸出會報錯,網(wǎng)上說b是一個全局對象的屬性并不是全局變量,這是為什么?第二個問題是全局對象是在進入任何執(zhí)行上下文之前就已經(jīng)創(chuàng)建了的對象,然后是進入上下文階段進行變量聲明,最后是代碼代碼執(zhí)行階段,但是為什么b只在代碼執(zhí)行階段才會掛到window下面?
查看完整描述

6 回答

?
慕田峪4524236

TA貢獻1875條經(jīng)驗 獲得超5個贊

舉個直白的例子


 function Example(){

    var a = 1  //此時為局部變量

 }

 

 

 (function(){

     b=1

 })()

 為什么會掛載全局(window)  是因為上面這個代碼b其實是賦值   默認全局應該會有var b;這個聲明語句


查看完整回答
反對 回復 2019-03-25
?
哆啦的時光機

TA貢獻1779條經(jīng)驗 獲得超6個贊

沒太看懂題主想問啥,只能說如果b之前沒有聲明過,那這種寫法在非嚴格模式下會導致jvm幫你聲明b,然后再賦值;在嚴格模式下會直接報錯,畢竟沒有聲明。如果之前b在外層或本層作用域有聲明過,那這里只是修改了原先b的值。

建議查查看“嚴格模式”。

另外好像有聽說過jvm在執(zhí)行一段腳本時會先把里面的變量先聲明好,再執(zhí)行。這段話是我憑印象說的,僅供參考。

b輸出當然會報錯,因為你在輸出的時候還沒有聲明b,除非你console.log(b = 1),這時才會先幫你聲明b,再輸出。就算jvm會幫你看一遍代碼,發(fā)現(xiàn)你底下聲明了b,但因此就幫你提前聲明b是不符合程序規(guī)范的,沒有哪個正常的、生產(chǎn)環(huán)境下的程序會先使用后聲明。


查看完整回答
反對 回復 2019-03-25
?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

a能被打印是因為變量提升的原因,b沒有聲明所以會所以會向上一層層找變量名為b的值,由于先前也沒有聲明過,棧中找不到,所以會報錯。
當代碼執(zhí)行到b的時候,沒寫var,會向上一層一層找是否有定義,如果有則將表達式賦值,如果找到最上層沒有對應的變量,則將b作為windows的對象的屬性并賦值。

https://img1.sycdn.imooc.com//5c987b9e00018aae06130544.jpg

第二個問題的話我不是太能理解。不知道你說的是不是這個意思:

https://img1.sycdn.imooc.com//5c987ba10001b86a02070113.jpg

一個作為全局變量的obj,在聲明之前打印,發(fā)現(xiàn)時undefined,
然后聲明并賦值,在打印輸出{},最后輸出的underlined是var obj = new Object()的返回值。
由于變量提升的原因,雖然代碼第一行沒定義obj,但實際上運行的時候是拆成了這樣

var obj = undefined//全局變量聲明
console.log(obj)//undefined
obj = new Object()//變量賦值
console.log(obj)//{}

至于b么,在代碼中沒有對他進行任何聲明,當然也不會提升,只是運行到這里的時候會當做b已經(jīng)在之前的部分已經(jīng)生命過一樣,向上查找,當找到最上層,也就是window對象后,嗯,掛上去XD


查看完整回答
反對 回復 2019-03-25
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

這樣看,a聲明了,但沒有定義


var a;

console.log(a); // undefined

console.log(b); // b 沒有聲明

b = 10;

a = 20;

b沒有定義,直接是掛載在window下面的


查看完整回答
反對 回復 2019-03-25
?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

沒寫var,js會在當前上下文下尋找該變量,如果沒有定義該變量就將它掛載到window中,如果有,就為全局變量。就是這樣啦


查看完整回答
反對 回復 2019-03-25
?
婷婷同學_

TA貢獻1844條經(jīng)驗 獲得超8個贊

首先變量初始化階段,var a,目前只有a.然后才進入代碼塊執(zhí)行階段,console.log(a)是a變量已經(jīng)存在,值為undefined。b不存在


查看完整回答
反對 回復 2019-03-25
  • 6 回答
  • 0 關注
  • 880 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號