超级简单的javascript函数调用

时间:2017-06-27 21:49:02

标签: javascript function

超级简单的功能:

function equals(a,b){return a==b;}

当我这样调用它时它工作正常并返回true:

equals(1,1)

当我这样称呼它虽然它返回false,但我不明白为什么:

equals.call(1,1)

我认为调用function.call与简单地调用函数是一样的。我在这里缺少什么?

7 个答案:

答案 0 :(得分:4)

.call期望的第一个参数是该函数调用中this的值,后跟您要传递给函数的参数。

由于您的函数不包含对this的引用,您可以通过传递null作为第一个参数来获得所需的结果:

equals.call(null, 1,1);

您可以在MDN文档Function.prototype.call

中找到有关此方法的更多详细信息

答案 1 :(得分:2)

Function.prototype.call中的第一个参数是函数将视为this的值。由于该功能不使用this,您可以传递任何您喜欢的内容,例如null

equals.call(null, 1, 1)

答案 2 :(得分:1)

正如here所述:

  

call()方法调用一个给定此值的函数   论据单独提供。

第一个参数是this

的值
function.call(thisArg, arg1, arg2, ...)

因为你传递的值为1,所以它被用作this,这显然是不正确的。您应该在开始时传递null和两个数字。

equals.call(null, 1, 1)

答案 3 :(得分:1)

使用.call时的第一个参数是“this”的引用。

请参阅此jsFiddle以获取示例:https://jsfiddle.net/4hfrc3sk/

答案 4 :(得分:1)

调用的第一个参数应为this。像这样:

equals.call(this,1,1)

在你的版本中,它试图将一个与undefined进行比较,因为没有提供第三个参数。

在此处阅读更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

答案 5 :(得分:1)

.call的第一个参数是context(= what" this"也会引用)。

所以你可以这样做:

equals.call(undefined, 1, 1);

但这是毫无意义的。

更多关于.call的阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

答案 6 :(得分:0)

如果要执行调用而不指定null或undefined作为第一个参数,则可以按如下方式重写代码:



function equals(a,b) {
  var w = window;
  return (w.a == w.b);
}

d = document;
d.g = d.getElementById;

var a = 1;
var b = 1;
var res = equals.call(a,b);

d.g("answer").innerHTML= "\n<BR>" + a + " ==  " + b + "? " + res + "\n";

a = 5;
b = 9;
res = equals.call(a,b);

d.g("answer").innerHTML += "\n<BR>" + a + " ==  " + b + "? " + res;
&#13;
#answer {
font: 22pt Arial,Helvetica;
color: #090;
}
&#13;
<div id="answer"></div>
&#13;
&#13;
&#13;

请参阅resource

但是,如果您只想在函数调用中提供null或undefined的上下文,请确保在函数定义中省略该参数,否则可能会出现错误的结果;请参阅goodbad