每日一學(一)

2022-02-18 06:54:51 字數 1146 閱讀 9852

以下兩段**各自的輸出結果是什麼,為什麼。

//

1.var a="window";

function

test()

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);

以上知識點出處:

每日一學 mybatis 04

59條訊息 m en error 7,17 j a 程式包org.junit不存在,包已引入卻報類找不到 不止junit類 ruby丶彬的部落格 csdn部落格 關於我的idea忽然就找不到test檔案了 裡面可以填任意的資料 如果是單一的話 但是當出現多個變數的時候這樣做就會出現錯誤 因為myba...

每日一學 python 02

https代表的是指保密狀況下的頁面 開始實現爬蟲操作 爬蟲就是找到複雜裡面的規律 在上面定義函式,在下面那個裡面執行方法 python裡面乙個資料夾裡面可以引用另外乙個資料夾裡面的方法 具體的呼叫的方法 from 包名 import 方法名 然後就可以直接呼叫了 模組名.函式名 爬取資料的基本思路...

每日學演算法(一) 插入排序

演算法導論 裡面說 是否具有演算法知識與技術的堅實基礎是區分真正熟練的程式設計師與初學者的乙個特徵。如果有乙個好的演算法背景,那麼你可以做的事情就多得多 所以今天開始,跟著 演算法導論 學習演算法。看著那本厚厚的書,不知道200天能不能學完。本系列部落格不是 演算法導論 的學習筆記,而是在學習演算法...