내 코드에 문제가 있지만 그 코드를 찾을 수 없습니다. 처음 registerStartDateValidation을 호출하면 defineKeyword 클로저의 startDateValidation 변수 값은 물론 클로저 외부에서 영향을받은 변수와 동일합니다. 그러나 두 번째로 변수는 다른 값으로 재 지정되지만 defineKeyword의 startDateValidation 값은 registerStartDateValidation을 처음 호출 한 값과 여전히 동일합니다. 클로저가 변수를 캐시합니까?클로저가 변수를 캐시합니까?
Tv4.prototype.registerStartDateValidation = function (attributes) {
var helper = this;
var dateNames = Object.keys(attributes);
var startDateName = dateNames[0];
var startDateString = attributes[startDateName];
var endDateName = dateNames[1];
var endDateString = attributes[endDateName];
var startDateValidation = helper.startDateValidation(startDateString, startDateName, endDateString, endDateName);
console.log(startDateValidation)//First time equal "true", second time equal "false"
tv4.defineKeyword('startDate', function (data, value) {
if (value === 'startDate') {
console.log(startDateValidation)//First time equal "true", second time still equal "true"
return startDateValidation
}
});
};
ajax 요청을하는 것이 아무것도 없으므로 함수가 호출되는 순서가 엉망이 될 수 있습니다.
바이올린을 만들 수 있습니까? –
당신이 얻고있는 결과는 들리지 않을 것이며, [test] (http://jsfiddle.net/k43X4/)는 두 로그 모두 똑같은 것을 반환해야 함을 보여줍니다. helper.startDateValidation은 비동기식입니다. 또는 비동기식입니다. – adeneo
아니요 비동기가 아니지만 startDateValidation을 멤버 데이터로 설정하면 알아 차렸습니다. this.startDateValidation, startDateValidation은 좋은 정보를 가지고 있습니다. 하지만 멤버 변수로 설정하고 싶지 않습니다 ... –