gpt4 book ai didi

javascript - C# 本地函数与 JavaScript 嵌套函数之间有什么区别?

转载 作者:行者123 更新时间:2023-11-29 10:29:18 24 4
gpt4 key购买 nike

在 C# 中,局部函数是这样的:

public int MyFunction(int parameter)
{
int local = 6;
return MyLocalFunction(4);

// Local Function
int MyLocalFunction(int localFunctionParameter) => 42;
}

在 JavaScript 中,嵌套函数是:

function MyFunction(parameter) {
var local = 6;
return MyNestedFunction(4);

// Nested Function
function MyNestedFunction(localFunctionParameter) {
return 42;
}
}

除了语法,两者在性能上有什么区别吗?

最佳答案

C# 和 JavaScript 以不同方式处理它们的嵌套/局部函数。

对于您的示例,C# 将转而编译此代码:

public int MyFunction(int parameter)
{
int local = 6;
return MyLocalFunction(4);

// Local Function
int MyLocalFunction(int localFunctionParameter) => 42;
}

进入这段代码:

public int MyFunction(int parameter)
{
int num = 6;
return <MyFunction>g__MyLocalFunction|0_0(4);
}

[CompilerGenerated]
internal static int <MyFunction>g__MyLocalFunction|0_0(int localFunctionParameter)
{
return 42;
}

如您所见,<MyFunction>g__MyLocalFunction|0_0巧妙地不在“里面”MyFunction ,就在包含类中。这使它们与嵌套函数在根本上不同,而不仅仅是它们的名称,我想说。但是,它确实阻止我们在父函数之外使用该局部函数,这才是真正的最终目标。

JavaScript 实际上会在每次调用时重新创建其函数实例,这对性能不利,而且没有必要。我确实找到了一种方法来防止这种行为。您可以将您的 JavaScript 示例重写为:

var MyFunction = (function(parameter) {

return function(parameter) {
var local = 6;
MyNestedFunction(4);
};

function MyNestedFunction() {
return 42;
}
}());

这对我来说很笨拙,不是我想考虑本地/嵌套函数的方式。语法不如 C# 的语法直观。

本地函数,因为它们最终会被移出类,默认为永远不会被实例化两次的期望行为,所以这是两全其美的。它具有更自然的语法和更好的性能(即使只是一点点)。

关于javascript - C# 本地函数与 JavaScript 嵌套函数之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com