python与javascript比较_Javascript变量语义与Python的比较
除非我弄錯了(總是可能),否則所有Python變量都是完全相同的:對存儲在別處的數據對象的引用。沒有Python變量保存數據值,只有指向存儲在其他地方的值的始終取消引用的指針。這意味著說x=3;x=“foo”是沒有問題的,因為x只持有一個指針(所有指針的大小都相同),它從指向三開始,然后指針(不是3)被另一個指向字符串“foo”的指針覆蓋。所有函數調用只復制傳遞給它們的參數中的指針,而不管它們指向什么。所有類型信息、不變性規則等都存儲在所指向的數據對象中,而不是變量中。在
不過,我對Javascript變量感到困惑。我一直讀到有兩種類型的JS變量,基本的和對象的。基本數據類型(數字、字符串等)存儲在變量本身中,而對象的引用存儲在變量中,如Python。Java(不是JS)是這樣的,但是Java變量有一個聲明的類型,所以不能說“intx=3;x=”foo“,因為“intx”創建了一個定制為只保存int的內存
但是JS可以讓你毫無怨言地說'var x=3;x=“foo”'。一塊用來保存int的內存(不是指向int的指針而是int本身)怎么可能也保存任意字符串?這個JS'x'實際上是一個引用,只是假裝持有int,還是重新分配會導致它在內存中改變位置,如果它需要保存一個不同的類型,或者什么?他們說字符串是JS中的基本數據類型,基本類型的值在傳遞給函數時會被復制,所以對于一個非常長的字符串,如果字符串被傳遞到一個函數中,而不是像“對象”類型那樣傳遞給指針的兩個副本,那么內存中是否存在該字符串的兩個副本。遞歸會生成一個巨大字符串的大量副本嗎?在
據我目前所知,可觀察的行為最終會像Python一樣,而且書中并沒有明確區分實際發生的情況和有效的后果(在函數中重新分配變量不會改變調用方中的變量,等等)有人能澄清Javascript變量的真正、底層語義嗎?在
總結
以上是生活随笔為你收集整理的python与javascript比较_Javascript变量语义与Python的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分页式存储管理及地址转换(网易笔试题)
- 下一篇: Linux下pushd和popd命令怎么