# Question about global variables vs self

**URL:** <https://forum.defold.com/t/question-about-global-variables-vs-self/8790>\
**Category:** Questions\
**Created:** [May 30, 2017, 3:25pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790 "2017-05-30T15:25:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![hanthuyen8](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/h/ecb155/32.png) [@hanthuyen8](https://forum.defold.com/u/hanthuyen8)\
**Post date:** [May 30, 2017, 3:25pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/1 "2017-05-30T15:25:56Z")

</div>

Hi, I have a little question about global variables vs the variables inside “self”. What are the differences, benefits and best practices between them ?  
Like: local player\_position vs self.player\_position  
Thanks.

---

<div class="post-metadata">

**Author:** ![ross.grams](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/r/cab0a1/32.png) [@ross.grams](https://forum.defold.com/u/ross.grams)\
**Post date:** [May 30, 2017, 3:58pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/2 "2017-05-30T15:58:30Z")

</div>

You can check the docs on that subject: [Lua programming in Defold](http://www.defold.com/manuals/lua/#_locals_globals_and_lexical_scoping)

Basically, global variables (`a = 10`) are available everywhere, local variables (`local a = 10`) are available to all instances of that script file, and self properties (`self.a = 10`) are only available to that specific script instance.

---

<div class="post-metadata">

**Author:** ![hanthuyen8](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/h/ecb155/32.png) [@hanthuyen8](https://forum.defold.com/u/hanthuyen8)\
**Post date:** [May 30, 2017, 4:35pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/3 "2017-05-30T16:35:35Z")

</div>

Thanks, I already knew that.  
But which one should I use, Global or Self. I really care about how much the memory they are using.

Example:

```lua
local point = 100

function init(self)
self.point = 100
end

function A(self)
--using point here
--or using self.point here
--which one is better
end

```

---

<div class="post-metadata">

**Author:** ![ross.grams](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/r/cab0a1/32.png) [@ross.grams](https://forum.defold.com/u/ross.grams)\
**Post date:** [May 30, 2017, 5:22pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/4 "2017-05-30T17:22:50Z")

</div>

Ah, I see. Well if a before-and-after check of `profiler.get_memory_usage()` means something, then it uses exactly the same amount of memory either way.

---

<div class="post-metadata">

**Author:** ![sicher](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sicher/32/8_2.png) [@sicher](https://forum.defold.com/u/sicher)\
**Post date:** [May 30, 2017, 10:54pm UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/5 "2017-05-30T22:54:45Z")

</div>

If you have no specific reason for using a global, store your data in self. It will most likely save you from future problems.

---

<div class="post-metadata">

**Author:** ![hanthuyen8](https://forum-defold.b-cdn.net/letter_avatar_proxy/v4/letter/h/ecb155/32.png) [@hanthuyen8](https://forum.defold.com/u/hanthuyen8)\
**Post date:** [May 31, 2017, 1:27am UTC](https://forum.defold.com/t/question-about-global-variables-vs-self/8790/6 "2017-05-31T01:27:53Z")

</div>

All of you guys, I really thank you.
