3

I have been reading here

https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management#Allocation_via_function_calls

and these lines confused me a bit:

var s = "azerty";
var s2 = s.substr(0, 3); // s2 is a new string
// Since strings are immutable value, JavaScript may decide 
// to not allocate memory, but just store the [0, 3] range.

So the comments say, JavaScript may decide to not allocate memory and just store the range [0,3] , Now doesnt memory have to be allocated before storing? in case not, as the comment implies, what exactly happens so that the stored range, gets stored in free space, not occupied already by other values.

4

2 に答える 2

4

コメントはs2、3 文字に特にメモリを割り当てる必要がないことを意味し"aze"ます。"azerty"代わりに、すでにbyに割り当てられているメモリを使用し、sそれ自体の長さがわずか 3 文字であることを覚えておくことができます。

不変の部分も重要です。不変でない場合、誰にも言わずにsその値を to に変更することを決定でき"azerty"、間接的にtoの値を変更することもできます。これは悲惨なことです。"foobar"s2"foo"

もちろん、これはメモリがまったく割り当てられないという意味ではありません。文字列の内容が見つかる場所と文字列の長さを格納するためのメモリを割り当てる必要があります。

于 2013-01-18T15:03:51.733 に答える
2

コメントは、文字列の文字データにスペースを割り当てることについて話しています。

新しい変数を作成するときは、当然そのためにスペースを割り当てる必要がありますが、それはヒープ上の新しいオブジェクトのようなものである必要はありません。事前に割り当てられた変数の配列内の項目である可能性があります。

2 つの変数が同じ文字データを指すことの利点は、部分文字列の長さが長い場合でも、部分文字列を取得するのにほとんどメモリを使用しないことです。欠点は、元の文字列が元の文字列からの部分文字列である限り、メモリ内に残ることです。使用されています。

于 2013-01-18T15:18:11.450 に答える