By default this is not possible. There are workarounds if you do it the OOP way.
You could create a class to store the values you want to use later.
Example:
/**
* Stores a value and calls any existing function with this value.
*/
class WPSE_Filter_Storage
{
/**
* Filled by __construct(). Used by __call().
*
* @type mixed Any type you need.
*/
protected $values;
/**
* Stores the values for later use.
*
* @param mixed $values
* @return void
*/
public function __construct( $values )
{
$this->values = $values;
}
/**
* Catches all function calls except __construct().
*
* Be aware: Even if the function is called with just one string as an
* argument it will be sent as an array.
*
* @param string $callback Function name
* @param array $arguments
* @return mixed
*/
public function __call( $callback, $arguments )
{
if ( is_callable( $callback ) )
{
return call_user_func( $callback, $arguments, $this->values );
}
// Wrong function called.
throw new InvalidArgumentException(
sprintf(
'File: %1$s<br>
Line %2$d<br>
There is no function %3$s',
__FILE__,
__LINE__,
$name
)
);
}
}
Now you can call the class with any function you want – if the function exists somewhere it will be called with your stored parameters.
Let’s create a demo function …
/**
* Filter function.
* @param array $content
* @param array $numbers
* @return string
*/
function wpse_45901_add_numbers( $args, $numbers )
{
$content = $args[0];
return $content . '<p>' . implode( ', ', $numbers ) . '</p>';
}
… and use it once …
// First instance of WPSE_Filter_Storage.
$wpse_45901_odd = new WPSE_Filter_Storage(
array ( 1, 3, 5 )
);
add_filter(
'the_content',
// Object instance and called function.
array ( $wpse_45901_odd, 'wpse_45901_add_numbers' )
);
… and again …
// Second instance of WPSE_Filter_Storage.
$wpse_45901_even = new WPSE_Filter_Storage(
array ( 2, 4, 6 )
);
add_filter(
'the_content',
array ( $wpse_45901_even, 'wpse_45901_add_numbers' )
);
Output:

The key is reusability: You can reuse the class (and in our examples also the function).
PHP 5.3+
If you can use a PHP version 5.3 or newer closures will make that much easier:
$param1 = '<p>This works!</p>';
$param2 = 'This works too!';
add_action(
'wp_footer',
function() use ( $param1 )
{
echo $param1;
},
11
);
add_filter(
'the_content',
function( $content ) use ( $param2 )
{
return t5_param_test( $content, $param2 );
},
12
);
/**
* Add a string to post content
*
* @param string $content
* @param string $string This is $param2 in our example.
* @return string
*/
function t5_param_test( $content, $string )
{
return "$content <p><b>$string</b></p>";
}