javascript - 未初始化的变量内存分配

标签 javascript c# variables initialization

JavaScript 示例:

假设我这样做:

var i;

并且永远不要在程序的其他任何地方使用 i 。会分配内存吗?

或者如果我使用,在几行之后说i=2;...此时会分配内存,还是在创建i期间分配内存?

C# 示例:

假设我这样做:

dynamic i;

并且永远不要在程序的其他任何地方使用 i 。它会被分配任何内存吗(如果会的话,什么时候?在编译期间?)?

或者如果我使用,则说 i=2;几行之后....此时是否会分配内存,或者是在创建 i 期间分配的内存,还是在编译期间分配的内存?

此外,除了 JavaScript 是解释型语言而 C# 是编译型语言而产生的差异之外,上面两个示例中的内存分配是否还有其他差异?

最佳答案

在 C# 中,表达式:

var i;

一开始就无法编译;如果我们考虑一下:

int i; // or dynamic i;

然后可以编译,并且可能会也可能不会保留,但这取决于它是字段(对象变量)还是本地(方法变量) 。字段不会被删除;但是,编译器可以根据需要自由删除局部变量。是否选择这样做可能取决于很多因素,但最值得注意的是:您是否正在执行优化的发布构建,而不是调试构建。即使局部变量显然已被写入和读取,编译器仍然可以选择将其删除 - 当然,仍将存在于堆栈中,但不在保留位置中。

关于javascript - 未初始化的变量内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362633/

相关文章:

c# - 如何在 C# 中实现仅在发生某些用户事件时返回的方法?

c# - Wix 工具集 : How to determine installation mode in a Custom Action

variables - 如何解析 Ansible group_vars 字典中的变量?

c++ - 如何将引用变量返回到函数中?

javascript - 如何用 Javascript 制作游戏?

javascript - 网页中的文本字段和文本框显示在网页图像下方。图片应作为背景图片

c# - 在 for 循环中创建新线程并传递参数

javascript - lambda 函数中 undefined variable

javascript - (对象)未定义

javascript - 检查队列是否存在