關於定義變數名為 name 的坑!!!

2022-02-21 09:55:42 字數 844 閱讀 4392

昨天下午沒有什麼工作可做,閒來無事就上看看了,有個問題讓我一直很納悶。

直接上**吧:

再用表示式建立函式時遇到的問題,這裡的**按照正常邏輯只有那個在變數定義後面的函式執行列印的值才是"global",其他的函式執行列印的是undefined。

可是實際上卻不是我們想要的答案

原因:原因就是這個變數名"name",在 js 中name既不是關鍵字又不是保留字,它屬於window裡的乙個內建物件,就是直接列印window裡面就會有name這個屬性。

window裡的name屬性是個空字串,如果定義了乙個變數為name,那它就會直接覆蓋window裡的name屬性的值。

只要指令碼中定義了變數name,覆蓋了window裡name的值,**裡所有用到name變數的時候就會直接從window物件裡面去找。

而這裡name就不會有關於變數提公升的問題,所以上面的問題才會一直列印出"global".

那麼問題就來了,是不是所有的window內建物件都像name那樣呢???

其實我也不知道,哈哈哈哈,要一步步去嘗試。。。

注意:有同學願意嘗試的話要注意下你定義的變數和內建物件名要一樣,然後還有就是要覆蓋的值和之前內建物件裡面的值的資料型別是一樣的,不能說number替換string,那樣是不行的!

父類子類定義相同的變數名

今天遇到了乙個很有意思的問題,父類和子類都定義了乙個同名變數,宣告乙個父類型別a指向子類例項時,a.變數 父類的值 public class father public father public class sonextends father override public intgeti pub...

python中關於變數名失效的案例

案例一 傳參動態匯入模組.selectmodule input please input your module name import selectmodule 此時匯入的模組名是selectmodule module import selectmodule 返回值標記這 匯入的這個模板案例二 讓...

關於定義變數的技巧

1.全域性變數 眾所周知,全域性變數應該是得到記憶體分配且可以被其他模組通過c語言中extern關鍵字呼叫的變數。因此,必須在 c和 h 檔案中定義。這種重複的定義很容易導致錯誤。以下討論的方法只需用在標頭檔案中定義一次。雖然有點不易懂,但一旦掌握,使用起來卻很靈活。如下定義出現在定義所有全域性變數...