当.call()&的这个值时。 .apply()可以是`null`或`undefined`?

时间:2016-07-14 03:03:16

标签: javascript

this&{ Function.prototype.call()可以是Function.prototype.apply()null

以下面的代码为例:

undefined

来自MDN Function.prototype.apply()

的示例

编辑: 原始问题有第三部分和另一个例子:

  

当.call()&的var numbers = [5, 6, 2, 3, 7]; var min = Math.min.apply(null, numbers); 值时.apply()可以是thisnull,甚至不是?

     

为例      

Array.prototype.slice.call(auguements);

我认为没有这个价值,但感谢@ guest271314现在我知道那是愚蠢的

1 个答案:

答案 0 :(得分:1)

仅在严格模式下可以是nullundefined

在草率模式下,它们将被忽略,您将获得全局对象。

function logThis() {
  console.log(this === window); // true :(
}
logThis.call(undefined);
logThis.call(null);
logThis.apply(undefined);
logThis.apply(null);

这是OrdinaryCallBindThis中使用的[[Call]]定义的。{3}}

  
      
  1. 如果 thisMode 是严格的,请将 thisValue thisArgument
  2.   
  3. 否则      
        
    1. 如果 thisArgument null undefined ,那么      
          
      1. thisValue 成为 calleeRealm 。[[globalThis]]。
      2.   
    2.   
    3. 否则      
          
      1. thisValue ToObject thisArgument )。
      2.   
    4.   
  4.   

如果您想知道调用具有nullundefined this值的函数是否会破坏它,那么您需要知道该函数将尝试使用{ {1}}值。

在您的示例中,this完全忽略Math.min值,因此您传递的值无关紧要。但是,由于它是this方法,因此传递Math代替Mathnull可能是有意义的。

undefined