www.91084.com

GVKun编程网logo

有关ES6 Arrow功能中“ arguments”的官方信息?(es6 array)

20

在这篇文章中,我们将带领您了解有关ES6Arrow功能中“arguments”的官方信息?的全貌,包括es6array的相关情况。同时,我们还将为您介绍有关[].shift.call(argument

在这篇文章中,我们将带领您了解有关ES6 Arrow功能中“ arguments”的官方信息?的全貌,包括es6 array的相关情况。同时,我们还将为您介绍有关 [].shift.call( arguments ) 和 [].slice.call( arguments ) 祥解、arguments及arguments.callee、Array.prototype.slice.call(arguments)、Cannot load main class from JAR file:/root/yarn SparkSubmitArguments.error(SparkSubmitArguments.的知识,以帮助您更好地理解这个主题。

本文目录一览:

有关ES6 Arrow功能中“ arguments”的官方信息?(es6 array)

有关ES6 Arrow功能中“ arguments”的官方信息?(es6 array)

(() => console.log(arguments))(1,2,3);

// Chrome, FF, Node give "1,2,3"// Babel gives "arguments is not defined" from parent scope

根据Babel的说法(从我可以告诉TC39的最初建议),这是“无效的”,因为箭头函数应该使用其父作用域作为参数。我唯一能发现与这矛盾的信息是一条评论说它被TC39拒绝了,但是我找不到任何支持的信息。

只是在这里寻找官方文档。

答案1

小编典典

Chrome,FF和node似乎在这里是错误的,Babel是正确的:

箭头函数arguments在其范围内没有自己的绑定;调用它们时不会创建任何参数对象。

在这里寻找官方文件

Arrow功能表达式求,其功能[有自己的ThisMode集到lexical,这种被称为当声明实例不会创建一个arguments对象。甚至有一个特别的注释(18a)指出“ 箭头函数从不具有参数对象。 ”。

 [].shift.call( arguments ) 和 [].slice.call( arguments ) 祥解

[].shift.call( arguments ) 和 [].slice.call( arguments ) 祥解

[].slice.call( arguments )
// 等效于
Array.prototype.slice.call( arguments )

个人理解:
要把arguments 转为数组对象!
本着 能少写就少写,能不写就不写的想法,想到slice():可从已有的数组中返回选定的元素。
slice 不会改变原来的数组,而是返回一个子数组。

let kindle = [1,2,3,4,5,6,7]
console.log(kindle.slice())  // [ 1, 2, 3, 4, 5, 6, 7 ]

那么下一个问题又来了,arguments 不是数组对象,不能调用数组的方法。
arguments想要转为数组对象,怎么转? for循环等。。。

但是能少写就少写,能不写就不写
这时候又要解锁一个call函数,或者 apply 函数。这两个函数都可以改变函数 this 的指向,函数运行时的作用域。区别就是参数不一样,第一个参数都是一个对象或者 ‘this’ 注意this加引号了, apply第二个参数接收一个数组,call则不是,call可以有n个参数有多少放多少就行

call函数详解点击这里

slice 方法原理就是根据传入的参数(值)对原数组(或者类数组)进行遍历获取,赋给新数组然后返回。如果没有参数便复制整个原数组(或者类数组),后赋给新数组然后返回。

重点来了
因为slice内部实现是使用的this代表调用对象。那么当[].slice.call() 传入 arguments对象的时候,通过 call函数改变原来 slice方法的this指向, 使其指向arguments,并对arguments进行复制操作,而后返回一个新数组。至此便是完成了arguments类数组转为数组的目的!

其实这可以理解为,让类数组调用数组的方法!

[].shift.call( arguments )

[].shift.call( arguments ) 这便是一个例子。
shift() 方法删除数组第一项,并返回删除项。
根据上边的理解,这句代码意思就是: “删除并拿到arguments的第一项”

arguments及arguments.callee

arguments及arguments.callee

首先有一个javascript函数

 代码  

<span>function test(a, b, c, d) {  
    return a + b;  
}</span>
登录后复制

在JavaScript中调用一个函数的实参个数可以和被调用函数的形参个数不匹配,要求并没有像java那么严格,因为在ECMAScript中的参数在内部是用一个数组来表示的,函数被调用的时候接收到的始终是这个数组,而不关心数组中包含包含哪些参数,甚至是没有元素也无所谓

Js代码

<span>function test(a, b, c, d) {  
    return a + b;  
}
登录后复制

console.log(test(10, 20));

这样的代码在JavaScript中是不会报错的,同时在JavaScript中我们可以通过下列代码获得实参及形参的个数

Js代码

<span>function test(a, b, c, d) {  
    console.log(test.length);//这里获得的是形参的个数  
    console.log(arguments.length);//这里获得的是实参的个数,这段代码必须放在函数内部  
}
登录后复制

console.log(test(10, 20));

同时还有一个类似的对象叫做arguments.calee,这个对象通常被用作递归调用

Js代码

<span>function test2(num) {  
    if(num <= 1) return 1;  
    else return num*arguments.callee(num-1);  
}  
  
console.log(test2(5));</span>
登录后复制

如果将arguments.callee(num-1)改为test2(num-1),会在下列调用中会报错

Js代码

<span>var F = test2;  
test2 = null;  
console.log(F(5));</span>
登录后复制

Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)

我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)

如:

 var a={length:2,0:''first'',1:''second''};
 Array.prototype.slice.call(a);//  ["first", "second"]
 var a={length:2};
 Array.prototype.slice.call(a);//  [undefined, undefined]

可能刚开始学习js的童鞋并不是很能理解这句为什么能实现这样的功能。比如我就是一个,所以,来探究一下。

首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组,这里我们看第2个。

Array.prototype.slice.call(arguments)能够将arguments转成数组,那么就是arguments.toArray().slice();到这里,是不是就可以说Array.prototype.slice.call(arguments)的过程就是先将传入进来的第一个参数转为数组,再调用slice?

 

再看call的用法,如下例子

复制代码

var a = function(){
      console.log(this);    // ''littledu''
      console.log(typeof this);      //  Object
      console.log(this instanceof String);    // true
 }
 a.call(''littledu'');

复制代码

可以看出,call了后,就把当前函数推入所传参数的作用域中去了,不知道这样说对不对,但反正this就指向了所传进去的对象就肯定的了。

到这里,基本就差不多了,我们可以大胆猜一下slice的内部实现,如下

复制代码

 Array.prototype.slice = function(start,end){
      var result = new Array();
      start = start || 0;
      end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
      for(var i = start; i < end; i++){
           result.push(this[i]);
      }
      return result;
 }

复制代码

大概就是这样吧,理解就行,不深究。

 

最后,附个转成数组的通用函数

复制代码

  var toArray = function(s){
      try{
          return Array.prototype.slice.call(s);
      } catch(e){
              var arr = [];
              for(var i = ,len = s.length; i < len; i++){
                  //arr.push(s[i]);
                   arr[i] = s[i];  //据说这样比push快
              }
               return arr;
     }
 }

复制代码


Cannot load main class from JAR file:/root/yarn   SparkSubmitArguments.error(SparkSubmitArguments.

Cannot load main class from JAR file:/root/yarn SparkSubmitArguments.error(SparkSubmitArguments.

Exception in thread "main" org.apache.spark.SparkException: Cannot load main class from JAR file:/root/yarn
    at org.apache.spark.deploy.SparkSubmitArguments.error(SparkSubmitArguments.scala:657)
    at org.apache.spark.deploy.SparkSubmitArguments.loadEnvironmentArguments(SparkSubmitArguments.scala:221)
    at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:116)
    at org.apache.spark.deploy.SparkSubmit$$anon$2$$anon$1.<init>(SparkSubmit.scala:913)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.parseArguments(SparkSubmit.scala:913)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:81)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:926)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:935)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala

我们今天的关于有关ES6 Arrow功能中“ arguments”的官方信息?es6 array的分享就到这里,谢谢您的阅读,如果想了解更多关于 [].shift.call( arguments ) 和 [].slice.call( arguments ) 祥解、arguments及arguments.callee、Array.prototype.slice.call(arguments)、Cannot load main class from JAR file:/root/yarn SparkSubmitArguments.error(SparkSubmitArguments.的相关信息,可以在本站进行搜索。

本文标签: