日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每日一学(一)

發布時間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每日一学(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    以下兩段代碼各自的輸出結果是什么,為什么。

    

//1.var a="window";function Test(){console.log(a);var a="local";console.log(a);}Test();//2.var pengpeng="This is his code!";pengpeng.love="study";console.log(pengpeng);console.log(pengpeng.love);

    

    先說第一個,最后的輸出結果首先輸出undefined,然后輸出local。有些神奇有木有,仔細梳理就會發現端倪了,代碼首先定義了一個全局對象a,因此按理說執行Test第一行代碼的時候,a此時應該會使用全局對象a的,往下的時候,局部a會覆蓋全局a,然后接著輸出local,但實際結果第一個卻是undefined。

    關于這點,不得不提JS的加載邏輯了,很多人會覺得JS變量的定義和聲明,是在JS運行期間進行的,其實不是,JS有個預加載邏輯,會事先構造運行環境以及作用域,那么答案就呼之欲出了,上面第一段代碼,JS預加載的時候,局部變量a覆蓋了全局變量a,那么既然是局部已經優先覆蓋了全局a,為什么第一個a還是undefined呢? 這就不得不提作用域了,預加載的時候,全局a的作用域已經變成了局部a,所以一個輸出的時候,根據作用域找a的時候,其實是找不到這個a的,此時的a,僅僅只是被定義過,但是它的作用鏈上,是指向下面的a的,下面的a在運行到那里的時候才會被賦值,而此時a相當于未賦值,所以輸出undefined,如果不是全局定義了一下a,第一次輸出a會報未定義。

    總結一下第一個案例的原理,JS預加載的時候,局部變量改變了全局變量的作用域,在局部變量之前訪問全局變量時,此時值是undefined。

    


  ?  ?再說第二個,這個不細心一下會被“障眼法”遮住,為啥給賦值了,第二個居然仍然輸出undefined?? ——答案是,變量pengpeng只是一個值類型對象,而非引用類型對象,值類型是沒有屬性的, 只有引用類型才有。so,penglong.love肯定會輸出undefined了。

    如果要用屬性,得這么用:

    

//3.var dingman=new Object();dingman.love="study";console.log(dingman.love);

    

    以上知識點出處:https://www.cnblogs.com/sharpxiajun/p/4133462.html

轉載于:https://www.cnblogs.com/sunshine-wy/p/9212476.html

總結

以上是生活随笔為你收集整理的每日一学(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。