JavaScriptの参照関数、呼び出し関数、コールバック関数
5623 ワード
//
function f(){
var x = 5;
return x;
}
var a = f;
var b = f;
console.log(a===b); // true
//
function f2() {
var x = 5;
return x;
}
var a2 = f2();
var b2 = f2();
console.log(a2 === b2);
//
function f3(){
var x = 5;
return function(){
return x;
}
}
var a3 = f3();
var b3 = f3();
console.log(a3 === b3); // false
上のコード:コード1とコードの2つの部分は関数参照と関数呼び出しの列であり、戻りはすべてtrueであり、コード3も関数呼び出しの列であり、戻りはfalseである.関数の参照と関数の呼び出しの本質的な違いを理解します.参照関数の場合、複数の変数メモリは関数の同じエントリポインタとして記憶されています.したがって、同じ関数では、いくつかの変数の参照に関わらず、それらは同じです.参照タイプ(オブジェクト、配列、関数など)に対してはメモリアドレスと比較されます.彼らのメモリアドレスが同じなら、説明は同じです.しかし、関数の呼び出しには、コード3などがあります.毎回呼び出したときには、新しいメモリアドレスが割り当てられていますので、彼らのメモリアドレスは同じではないので、falseに戻ります.しかし、コード二にとっては、彼らは関数に戻りませんでした.数値だけを返して、メモリアドレスではなく、比較値です.だから、彼らの値は同じです.だから、彼らもtrueに戻ります.また、次のようにオブジェクトの列を実列化してみてもいいです.彼らも異なるメモリアドレスに割り当てられていますので、falseに戻ります.次のコードのテスト:
function F(){
this.x = 5;
}
var a = new F();
var b = new F();
console.log(a === b); // false
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<script language="javascript" type="text/javascript">
function a(callback)
{
alert(" parent a!");
alert(" ");
callback();
}
function b(){
alert(" b");
}
function c(){
alert(" c");
}
function test()
{
a(b);
a(c);
}
script>
<body>
<h1> js h1>
<button onClick=test()>click mebutton>
<p> p>
body>
html>
参考資料javascript関数式プログラミングで身につけるべき知識点の解説