Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
Simple parameter passing within a setInternal() call?
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  9 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Tuxedo  
View profile  
 More options Feb 11, 2:04 pm
Newsgroups: comp.lang.javascript
From: Tuxedo <tux...@mailinator.com>
Date: Sat, 11 Feb 2012 20:04:23 +0100
Local: Sat, Feb 11 2012 2:04 pm
Subject: Simple parameter passing within a setInternal() call?
How can a simple string parameter be passed between two functions while
inside a setInterval call? For example:

function initialFunction(x){
alert(x);
setInterval('repeatingStuff(x)',5000);

}

function repeatingStuff(x){
alert(x);
}

...

<a href="..." onclick="initialFunction('param_x');">stuff</a>

But the error "x is not defined" results from ..Stuff(x) in
setInterval('repeatingStuff(x)',5000). How can the parameter between the
two functions be passed within the setInteval bit?

Many thanks,
Tuxedo


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "Simple parameter passing within a setInterval() call?" by Tuxedo
Tuxedo  
View profile  
 More options Feb 11, 2:39 pm
Newsgroups: comp.lang.javascript
From: Tuxedo <tux...@mailinator.com>
Date: Sat, 11 Feb 2012 20:39:32 +0100
Local: Sat, Feb 11 2012 2:39 pm
Subject: Re: Simple parameter passing within a setInterval() call?

Tuxedo wrote:

[...]

> setInterval('repeatingStuff(x)',5000). How can the parameter between the

I thought I had tried this already but I must have simply got the quoting
wrong. Of course, this works:
setInterval('repeatingStuff("' + x + '")',5000);

Tuxedo


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "Simple parameter passing within a setInternal() call?" by Andreas Bergmaier
Andreas Bergmaier  
View profile  
 More options Feb 11, 3:39 pm
Newsgroups: comp.lang.javascript
From: Andreas Bergmaier <andbe...@web.de>
Date: Sat, 11 Feb 2012 21:39:30 +0100
Local: Sat, Feb 11 2012 3:39 pm
Subject: Re: Simple parameter passing within a setInternal() call?
Tuxedo schrieb:

x must be in the scope of the second function. Therefore, you should
define repeatingStuff inside the initialFunction:

function initialFunction(x){
    alert(x);
    function repeatingStuff(x){
       alert(x);
    }
    setInterval(repeatingStuff,5000);

}

or shorter:

function initialFunction(x){
    alert(x);
    setInterval( function(x){
       alert(x);
    }, 5000);

}

You should pass a function to setIntervall/Timeout, instead of a code to
be evaluated each time (slow & buggy).

Another alternative is to use bind() or other functions, to return a
function which calls repeatingStuff with the needed parameters:

function repeatingStuff(){...}
function initialFunction(x){
    alert(x);
    setInterval( repeatingStuff.bind(this, x), 5000);

}

Greetings,
  Bergi

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Thomas 'PointedEars' Lahn  
View profile  
 More options Feb 11, 4:06 pm
Newsgroups: comp.lang.javascript
Followup-To: comp.lang.javascript
From: Thomas 'PointedEars' Lahn <PointedE...@web.de>
Date: Sat, 11 Feb 2012 22:06:25 +0100
Local: Sat, Feb 11 2012 4:06 pm
Subject: Re: Simple parameter passing within a setInternal() call?

In the scope _chain_.

> Therefore, you should define repeatingStuff inside the initialFunction:

> function initialFunction(x){
>     alert(x);            ^

            ^--------------'
>     function repeatingStuff(x){

                              ^
>        alert(x);            |

               ^--------------'
>     }
>     setInterval(repeatingStuff,5000);
> }

> or shorter:

> function initialFunction(x){
>     alert(x);            ^

            ^--------------'
>     setInterval( function(x){
>        alert(x);          ^

               ^------------'

>     }, 5000);
> }

This does not work, because in the context of the function (referred by
`repeatingStuff'), `x' is bound to the inner function's argument `x' (which
is not passed a useful value from the DOM implementation anyway) and not to
that of the inner function's definition context.  Please test before you
post, or clearly mark code as untested.

> You should pass a function to setIntervall/Timeout, instead of a code to
> be evaluated each time (slow & buggy).

The function code also will have to be evaluated each time.  But it is true
that evaluating the string value as a Program is less efficient and more
error-prone than that.

> Another alternative is to use bind() or other functions, to return a
> function which calls repeatingStuff with the needed parameters:

> function repeatingStuff(){...}
> function initialFunction(x){
>     alert(x);
>     setInterval( repeatingStuff.bind(this, x), 5000);
> }

This works in implementations of ECMAScript 5.x or where you have a suitable
scripting framework that emulates Function.prototype.bind(), but it is
unnecessarily inefficient by comparison.

PointedEars
--

> If you get a bunch of authors […] that state the same "best practices"
> in any programming language, then you can bet who is wrong or right...

Not with javascript. Nonsense propagates like wildfire in this field.
  -- Richard Cornford, comp.lang.javascript, 2011-11-14

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Andreas Bergmaier  
View profile  
 More options Feb 11, 4:33 pm
Newsgroups: comp.lang.javascript
From: Andreas Bergmaier <andbe...@web.de>
Date: Sat, 11 Feb 2012 22:33:33 +0100
Local: Sat, Feb 11 2012 4:33 pm
Subject: Re: Simple parameter passing within a setInternal() call?
Thomas 'PointedEars' Lahn schrieb:

I'm sorry, I forgot the essential thing when copying the example code :-(
@Tuxedo: The thing is to have only one variable "x". The code should be

function initialFunction(x){
     alert(x);
     setInterval( function(){
        alert(x);
     }, 5000);

}
>> Another alternative is to use bind() or other functions, to return a
>> function which calls repeatingStuff with the needed parameters

> This works in implementations of ECMAScript 5.x or where you have a suitable
> scripting framework that emulates Function.prototype.bind(), but it is
> unnecessarily inefficient by comparison.

Is it? Unnecessarily in this case, yes, but if you have defined
"repeatingStuff" elsewhere it is imho much more elegant than coding

var x;
setInterval( function(){
    doRepeatingStuffWith(x);

}, 5000);

  Bergi

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Thomas 'PointedEars' Lahn  
View profile  
 More options Feb 11, 5:44 pm
Newsgroups: comp.lang.javascript
Followup-To: comp.lang.javascript
From: Thomas 'PointedEars' Lahn <PointedE...@web.de>
Date: Sat, 11 Feb 2012 23:44:04 +0100
Local: Sat, Feb 11 2012 5:44 pm
Subject: Re: Simple parameter passing within a setInternal() call?

That is not even equivalent in the first place.  Clearly you do not
understand bind().  Please refrain from recommending it until you do.

PointedEars
--
When all you know is jQuery, every problem looks $(olvable).


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Andreas Bergmaier  
View profile  
 More options Feb 11, 9:04 pm
Newsgroups: comp.lang.javascript
From: Andreas Bergmaier <andbe...@web.de>
Date: Sun, 12 Feb 2012 03:04:20 +0100
Local: Sat, Feb 11 2012 9:04 pm
Subject: Re: Simple parameter passing within a setInternal() call?
Thomas 'PointedEars' Lahn schrieb:

I do, and I never said it was to be equivalent. Of course bind() needs a
context to set, dereferences x, and builds a new function. That even
could be useful (I'm not sure what the OP needs), so why shouldn't I
mention it as an alternative?

  Bergi


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "Simple parameter passing within a setInterval() call?" by Tuxedo
Tuxedo  
View profile  
 More options Feb 12, 3:22 am
Newsgroups: comp.lang.javascript
From: Tuxedo <tux...@mailinator.com>
Date: Sun, 12 Feb 2012 09:22:43 +0100
Local: Sun, Feb 12 2012 3:22 am
Subject: Re: Simple parameter passing within a setInterval() call?

Andreas Bergmaier wrote:

[...]

> @Tuxedo: The thing is to have only one variable "x". The code should be

> function initialFunction(x){
>      alert(x);
>      setInterval( function(){
>         alert(x);
>      }, 5000);
> }

Thanks - works great! Much better than my quoted parameters as in
Stuff("' + x + '")',5000 etc.

Tuxedo

[..]


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Dr J R Stockton  
View profile  
 More options Feb 12, 5:02 pm
Newsgroups: comp.lang.javascript
From: Dr J R Stockton <reply1...@merlyn.demon.co.uk>
Date: Sun, 12 Feb 2012 22:02:13 +0000
Local: Sun, Feb 12 2012 5:02 pm
Subject: Re: Simple parameter passing within a setInterval() call?
In comp.lang.javascript message <jh6g5k$bf...@news.albasani.net>, Sat,
11 Feb 2012 20:39:32, Tuxedo <tux...@mailinator.com> posted:

>Tuxedo wrote:

>[...]

>> setInterval('repeatingStuff(x)',5000). How can the parameter between the

>I thought I had tried this already but I must have simply got the quoting
>wrong. Of course, this works:
>setInterval('repeatingStuff("' + x + '")',5000);

That will use the value of x at call time, if x is simple or an
expression.

Another way is to pass x as a global variable; or, perhaps more clearly,
as a property of a global Object reserved and named, or otherwise
suitable, for the purpose.  Actually, repeatingStuff is such an Object.

That eliminates conversions to/from String, which may be inexact.

--
 (c) John Stockton, Surrey, UK.  ?...@merlyn.demon.co.uk   Turnpike v6.05   MIME.
   Web  <http://www.merlyn.demon.co.uk/> - FAQish topics, acronyms, & links.
 Proper <= 4-line sig. separator as above, a line exactly "-- " (SonOfRFC1036)
 Do not Mail News to me. Before a reply, quote with ">" or "> " (SonOfRFC1036)


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »