小编Fli*_*sey的帖子

Javascript和Lua之间的闭包差异

为什么这两个看似相同的代码片段在Javascript和Lua中表现不同?

LUA:

function main()
    local printFunctions={}
    local i,j
    for i=1,10 do
        local printi = function()
            print(i)
        end
        printFunctions[i]=printi
    end
    for j=1,10 do
        printFunctions[j]()
    end
end
main()
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

function main()
{
    var printFunctions=[]
    var i,j;
    for(i=0;i<10;i++)
    {
        var printi = function()
        {
            console.log(i);
        }
        printFunctions[i]=printi;
    }
    for(j=0;j<10;j++)
    {
        printFunctions[j]();
    }
}
main()
Run Code Online (Sandbox Code Playgroud)

Lua中的示例打印0 1 2 3 4 5 6 7 8 9,但Javascript中的示例打印10 10 10 10 10 10 10 10 10 10.任何人都可以解释Javascript和Lua中导致这种情况发生的闭包之间的区别吗?我来自Javascript背景,所以请关注Lua方面.

我试图在我的博客上解释这一点,但我不确定我的解释是否正确,所以任何澄清都将不胜感激.

编辑

谢谢大家,现在我明白了.这个稍微修改过的版本的Lua代码按预期打印10,10,10,10,10,10,10,10,10,10

function …
Run Code Online (Sandbox Code Playgroud)

javascript lua closures scope

13
推荐指数
1
解决办法
411
查看次数

gcc -g 标志:移动源代码

我的理解是,当您使用 编译 C 代码时gcc -g,gcc 将插入调试信息,其中包括对原始源代码的引用(例如行号)。然后其他程序如 gdb 和 objdump 可以稍后恢复这些引用。作为示例,我们将使用objdump -Swhich 打印与相应源代码交错的程序集。

我的目标是将编译后的二进制文件复制到另一台计算机,并且仍然能够检索此调试信息。但是,目前,当我这样做时,所有调试信息都丢失了。我也不介意复制源文件,但是第二台计算机运行的是不同的操作系统,所以文件结构不同,我不能将源文件放在完全相同的绝对位置,这会阻止 objdump 找到源代码。我查看了二进制文件,看到了一个看起来像这样的部分,中间穿插着一堆二进制文件:

/home/path/to/source/code

我尝试编辑它以匹配源的新路径,但它只是使二进制文件无效。

我还研究了gcc 标志,希望其中一个允许指定源代码的相对路径而不是绝对路径,但我找不到类似的东西。

作为参考,这是我希望从中获得的输出类型objdump - S

0804840b <main>:
#include <stdio.h>
int main(){
 804840b:       8d 4c 24 04             lea    0x4(%esp),%ecx
 804840f:       83 e4 f0                and    $0xfffffff0,%esp
 8048412:       ff 71 fc                pushl  -0x4(%ecx)
 8048415:       55                      push   %ebp
 8048416:       89 e5                   mov    %esp,%ebp
 8048418:       51                      push   %ecx
 8048419:       83 ec 14                sub    $0x14,%esp
  for(int varName = 0; varName < …
Run Code Online (Sandbox Code Playgroud)

c gcc gdb objdump

6
推荐指数
1
解决办法
1062
查看次数

标签 统计

c ×1

closures ×1

gcc ×1

gdb ×1

javascript ×1

lua ×1

objdump ×1

scope ×1