2017-10-23 5 views
-2

私はajax呼び出しを持つ関数を持っています。コールバックでは、引数を使用してクラスを検索します。この関数を複数回呼び出すと、前の関数のコールバック引数に影響しますか?引数を上書きする場合と同じです。JavaScript関数はどのように機能しますか?具体的な引数

例。

function foo(ARG){ 
    $.ajax({ 
    method: "POST", 
    url: "www.example.com", 
    data: myData, 
    dataType: "JSON", 
    success: function(data){ 
     ARG.append(data); 
    }, 
     error: function(xhr, ajaxOptions, thrownError){ 
    } 
    }); 
} 

var class1 = $('.class1'); 
foo(class1); 

var class2 = $('.class2'); 
foo(class2); 

var class3 = $('.class3'); 
foo(class3); 

編集:通常、コールバックが行われる前に3つの関数がすべて呼び出されます。コールバックは引数の最新バージョンを使用していますか?あるいはそれが呼び出されたときそこにあった議論?

+2

ですから、最初にそれを試してみてください方法については? – Justinas

+0

私は閉鎖を読むことをお勧めします。 – evolutionxbox

+0

@Justinas私はそれを試してみたが、私は何の問題も見ていない。しかし、私はまだ彼らがどのように働くのか、私がそれらについての情報を見つけることができるかについてはまだ分かりません。 –

答えて

3

はJavaScriptことでスピーキングJS帳を引用する:アクセルRauschmayer

関数は、その誕生のスコープ

function createInc(startValue) { 
 
    return function (step) { 
 
     startValue += step; 
 
     return startValue; 
 
    }; 
 
} 
 
var inc = createInc(5); 
 
var inc2 = createInc(5); 
 
console.log(inc(1)); 
 
console.log(inc(2)); 
 
console.log(inc2(1));

createInc(によって返された関数への接続を維持する)んstartValueへの接続を失うことはありません。関数呼び出しを横切るists。本書は、作業全体をかなり精巧な方法で説明しています。

2

ARGはあなたの恐怖だった場合は上書きされません。以下はその証拠です。

var myData = 'q=roses'; 
 

 
function foo(ARG) { 
 
    $.ajax({ 
 
    method: "GET", 
 
    url: "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js", 
 
    data: myData, 
 
    dataType: "JSON", 
 
    complete: function(data) { 
 
     console.log(ARG.selector); 
 
     ARG.append(ARG.selector); 
 
    }, 
 
    error: function(xhr, ajaxOptions, thrownError) {} 
 
    }); 
 
} 
 

 
var class1 = $('.class1'); 
 
foo(class1); 
 

 
var class2 = $('.class2'); 
 
foo(class2); 
 

 
var class3 = $('.class3'); 
 
foo(class3);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p class="class1">1</p> 
 
<p class="class2">2</p> 
 
<p class="class3">3</p>

関連する問題