gpt4 book ai didi

javascript - 在对象声明中添加函数名称有什么好处?

转载 作者:行者123 更新时间:2023-12-02 15:39:38 24 4
gpt4 key购买 nike

例如,当我将一个函数指定为对象声明的属性时,我的 Webpack 加载器(即 babel-loader)会自动添加函数名称?例如,假设我有以下比较函数:

var utils = {
compare: function (a, b) {
if (parseFloat(a[0]) - parseFloat(b[0]) === 0) {
return parseFloat(a[1]) - parseFloat(b[1]);
}
else {
return parseFloat(a[0]) - parseFloat(b[0]);
}
}
}

Webpack 将其编译为以下内容:

var utils = {
compare: function compare(a, b) {

if (parseFloat(a[0]) - parseFloat(b[0]) === 0) {
return parseFloat(a[1]) - parseFloat(b[1]);
} else {
return parseFloat(a[0]) - parseFloat(b[0]);
}
}
}

[比较:函数 (a,b) 已更改为比较:函数比较 (a,b)]

最佳答案

在您在问题中发布的代码中,确实没有什么好处。然而,要递归调用匿名函数,您需要给它一个名称(至少在较新版本的 javascript 中)。这个语法有一个名字。它被称为 named function expression .

在旧版本的 javascript 中,arguments 对象有一个名为 .callee 的属性,该属性引用该函数。这可用于递归到匿名函数:

var sum = function(numbers){
var n = numbers.pop();
if (numbers.length) {
return n + arguments.callee(numbers);
}
return n;
}

ES5 中已弃用 arguments.callee 属性。因此,在当前(和较新)版本的 javascript 中,您需要使用命名函数表达式对匿名函数进行递归:

var sum = function s (numbers){
var n = numbers.pop();
if (numbers.length) {
return n + s(numbers);
}
return n;
}
<小时/>

请注意,根据规范,命名函数表达式的名称是函数本身私有(private)的。因此,在无错误的 javascript 解释器/编译器中,上面的第二个示例不应在匿名函数 sum() 之外创建名为 s() 的函数。但是,已知某些 ES4 实现(较旧的浏览器)会被破坏,并且会创建 s()sum()。除了名称泄漏之外,命名函数表达式语法适用于过去 10 年左右发布的所有浏览器。

关于javascript - 在对象声明中添加函数名称有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32686475/

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