Javascript: using the apply method
Ad
Here's my code:
var add = function(x,y) {
console.log(x + y);
}
var delay = function(func, wait) {
var inner = function() {
return setTimeout(function() {
return func.apply(inner, arguments);
}, wait);
}
return inner;
};
var delayAdd = delay(add, 500);
delayAdd(100,200); //should log 300 to console after 500ms
//instead, it logs NaN
I suspect the problem is in line 9: return func.apply(inner, arguments);
My intention is for add
to be called on the arguments in inner
, which are defined in the last line delayAdd(100,200)
. However, this does not seem to be happening. Why is this, and how can I fix this issue?
Ad
Answer
Ad
The arguments
keyword is specific to the scope it's being referenced from. As it is, you're passing the arguments from your setTimeout
function. What you need to do is save a reference from the scope you want, and pass that:
var inner = function() {
var args = arguments;
return setTimeout(function() {
return func.apply(inner, args);
...
Ad
source: stackoverflow.com
Related Questions
Ad
- → How to update data attribute on Ajax complete
- → October CMS - Radio Button Ajax Click Twice in a Row Causes Content to disappear
- → Octobercms Component Unique id (Twig & Javascript)
- → Passing a JS var from AJAX response to Twig
- → Laravel {!! Form::open() !!} doesn't work within AngularJS
- → DropzoneJS & Laravel - Output form validation errors
- → Import statement and Babel
- → Uncaught TypeError: Cannot read property '__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED' of undefined
- → React-router: Passing props to children
- → ListView.DataSource looping data for React Native
- → Can't test submit handler in React component
- → React + Flux - How to avoid global variable
- → Webpack, React & Babel, not rendering DOM
Ad