Application d'une fonction à nulle en Javascript

Pourquoi les travaux suivants:

function sum(a,b) { return a + b; } var result = sum.call(null,3,4); // 7 

Pourquoi le résultat est-il défini? J'appelle la somme comme une méthode nulle. Mais null n'est pas un objet et ne peut pas avoir de propriétés!

Que se passe-t-il?

    Le premier argument pour Function.prototype.call est le contexte , qui définit this valeur pour le contexte d'exécution de la fonction invoquée, rien d'autre.

    Donc, fondamentalement, vous dites que this se réfère à null (au moins, en mode ES5 stricte), mais comme vous n'êtes pas accessible de toute façon, cela ne fait aucune différence.

    En mode non strict, this ne peut pas être null , donc il est remplacé par l' objet global à la place.

    Lorsque vous utilisez .apply ou .apply avec null ou undefined , la valeur par défaut (généralement la window ) est automatiquement utilisée à la place si elle n'est pas en mode strict.

    De MDN (l'accent est mis):

    thisArg
    La valeur de this prévoyait l'appel au fun . Notez que ce n'est peut-être pas la valeur réelle observée par la méthode: si la méthode est une fonction dans un code de mode non strict, null et undefined sera remplacé par l'objet global et les valeurs primitives seront encadrées.

    Si vous êtes en mode strict, il sera effectivement null ou undefined .

     (function() { 'use strict'; return this; }).call(null); // null 
     (function() { 'use strict'; return this; })(); // undefined 

    Ce n'est pas. NULL dans ce cas spécifie à quel objet this mot-clé est lié. Dans votre méthode, en la définissant sur NULL, elle ne sera pas liée à this variable ou elle sera liée à la fonction elle-même ou à la fenêtre.

    Comme vous n'utilisez pas de variables ou de fonctions auxquelles vous accédez, il n'est pas nécessaire d'utiliser la méthode d'appel … vous pouvez simplement utiliser la sum(3,4)

    Comme indiqué dans, par exemple, MDN , le premier argument est

    La valeur de celle-ci prévoyait l'appel à [la méthode]. Notez que ce n'est peut-être pas la valeur réelle observée par la méthode: si la méthode est une fonction dans un code de mode non strict, nul et indéfini sera remplacé par l'objet global et les valeurs primitives seront encadrées.

    Comme l'a expliqué le MDN.

    ThisArg

    La valeur de celle-ci prévoyait l'appel au plaisir. Notez que ce n'est peut-être pas la valeur réelle observée par la méthode: si la méthode est une fonction dans un code de mode non strict, nul et indéfini sera remplacé par l'objet global et les valeurs primitives seront encadrées.

    Il suffit de le mettre par un petit code.

     <script > 'use strict' function fun() { alert(this); } fun.call(null); </script> 

    En mode strict, ceci est nul. Mais dans le mode non strict. Il s'agit d'une fenêtre ou d'un objet global.