Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要使用这个javascript箭头函数,或者有什么区别?_Javascript_Arrow Functions - Fatal编程技术网

为什么要使用这个javascript箭头函数,或者有什么区别?

为什么要使用这个javascript箭头函数,或者有什么区别?,javascript,arrow-functions,Javascript,Arrow Functions,我偶然发现了这个相对简单的箭头函数: varx=([a,b]=[1,2],{x:c}={x:a+b})=>a+b+c; console.log(x())第一个表示法将具有属性x的对象作为第二个参数。它被解构,x被提取为c。如果未定义,则使用具有属性x的默认对象: console.log(x([1, 2], {x: 5})); 而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字): 因此,唯一的区别是输入函数的第二个参数。第一个表示法将具有属性x的对象作为第二个参数。它被解构,x被

我偶然发现了这个相对简单的箭头函数:

varx=([a,b]=[1,2],{x:c}={x:a+b})=>a+b+c;

console.log(x())
第一个表示法将具有属性
x
的对象作为第二个参数。它被解构,
x
被提取为
c
。如果未定义,则使用具有属性
x
的默认对象:

console.log(x([1, 2], {x: 5}));
而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字):


因此,唯一的区别是输入函数的第二个参数。

第一个表示法将具有属性
x
的对象作为第二个参数。它被解构,
x
被提取为
c
。如果未定义,则使用具有属性
x
的默认对象:

console.log(x([1, 2], {x: 5}));
而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字):


因此,唯一的区别是输入函数的第二个参数。

您的第二个is示例的第二个参数是一个简单的es6默认初始化,而您的第一个示例的第二个参数也是一个简单的es6默认初始化(带分解结构)。 但是,我想你已经知道了

问题的另一部分是,给我看第一个更好的用例

当你想从一个巨大的javascipt对象中访问一个密钥时,解构是非常有用的

大概是这样的:

 aHugeJavascriptObject = {
   key1:'value1',
   .
   .
   .
   key999:'value999'
 }
现在,访问对象的键
key999
的一种方法是
aHugeJavascriptObject.key999
,而您可能需要这样做

 const { key999 } = aHugeJavascriptObject
我还假设你也知道这一点。
但是,恐怕这就是你的问题所在。

你的第二个例子的第二个参数是一个简单的es6默认初始化,而你的第一个例子的第二个参数也是一个简单的es6默认初始化和解构。 但是,我想你已经知道了

问题的另一部分是,给我看第一个更好的用例

当你想从一个巨大的javascipt对象中访问一个密钥时,解构是非常有用的

大概是这样的:

 aHugeJavascriptObject = {
   key1:'value1',
   .
   .
   .
   key999:'value999'
 }
现在,访问对象的键
key999
的一种方法是
aHugeJavascriptObject.key999
,而您可能需要这样做

 const { key999 } = aHugeJavascriptObject
我还假设你也知道这一点。
但是,恐怕这就是你的问题所在。

在这种情况下,没有太多。一般来说,这种语法允许更多。谢谢你的链接。起初,我没有参考这些例子。但是现在,在回答之后,我得到了答案@在这种情况下,不是很多。一般来说,这种语法允许更多。谢谢你的链接。起初,我没有参考这些例子。但是现在,在回答之后,我得到了答案@Jacquegoupillyes,这就是对is的功能和工作原理的解释。我也知道这一点但这并不是原因的答案。
那么有人能告诉我这两种符号的区别吗至于为什么要使用它:如果你将一个对象作为一个具有大量其他属性的参数传递,它只会选择你需要的一个。对不起,我经常用这个,所以我觉得很明显,我误解了你的问题。nitte93user3232918解释得很好。我不想贬低你的回答对我来说,还不完全清楚你想用你的答案告诉我什么。谢谢你的努力!是的,这就是对is的功能和工作原理的解释。我也知道这一点但这并不是原因的答案。
那么有人能告诉我这两种符号的区别吗至于为什么要使用它:如果你将一个对象作为一个具有大量其他属性的参数传递,它只会选择你需要的一个。对不起,我经常用这个,所以我觉得很明显,我误解了你的问题。nitte93user3232918解释得很好。我不想贬低你的回答对我来说,还不完全清楚你想用你的答案告诉我什么。谢谢你的努力!谢谢你的回答。我喜欢你的意图。如果我理解正确,你的意思是:
varobj={key:3};var x=([a,b]=[1,2],{key:c}=obj)=>a+b+c。好吧,至少这是一个不错的名称内联翻译,但甚至可以用
c=obj.key
来完成。如果函数中有更多参数,这将变得更好!所以,不错。还是我没有领会你的意思?是的,没错,你可以使用解构或
c=obj.key
,这两种方法都适合你。但是,如果您有一个巨大的对象,每次访问密钥时都要写入
obj.yourKeyName
,那么
obj
部分就会变得多余。相反,如果您已经知道要访问哪个密钥,则可以执行
{yourKeyName,someOtherKey}=obj。但这并不重要,两者都做同样的工作,只是代码少了,工作多了。我希望你能明白这一点。
好吧,这是一个很好的用例解释。非常感谢,你给了我正确的方向。谢谢你的回答。我喜欢你的意图。如果我理解正确,你的意思是:
varobj={key:3};var x=([a,b]=[1,2],{key:c}=obj)=>a+b+c。好吧,至少这是一个不错的名称内联翻译,但甚至可以用
c=obj.key
来完成。如果函数中有更多参数,这将变得更好!所以,不错。还是我没有领会你的意思?是的,没错,你可以使用解构或
c=obj.key
,这两种方法都适合你。但是,如果您有一个巨大的对象,每次访问密钥时都要写入
obj.yourKeyName
,那么
obj
部分就会变得多余。相反,如果您已经知道要访问哪个密钥,则可以执行
{yourKeyName,someOtherKey}=obj。但事实并非如此,马特