当我遇到调用匿名函数的奇怪方式时,我正在阅读Twitter上的JS源代码 - 在改进我的JS知识库的过程中:
!function( $ ) {
...
}( window.jQuery );
Run Code Online (Sandbox Code Playgroud)
......这有效!:)
对每个人来说,显而易见的是:
function ( $ ) { ... } ( window.jQuery )
Run Code Online (Sandbox Code Playgroud)
不起作用(语法错误),而这一个是正确的:
(function ( $ ) { .... })( window.jQuery )
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个魔术(为什么案例与!function作品)?
我需要获取匿名函数参数的名称.
例如:
$func = function ( $param1, $param2 ) { ... };
$names = DO_SOMETHING($func);
// after this $names should become something like array('param1', param2')
Run Code Online (Sandbox Code Playgroud)
从理论上讲,它是可能的,因为它var_dump($func)说$func是Closure类的对象并具有parameter属性array('param1', 'param2').
php.net上的官方文档描述了Closure类的方法,它可以帮助我.
我试图直接访问这个属性,但PHP死于致命错误:Closure object cannot have properties.
我试图获得对象变量,get_object_vars但似乎parameter属性被解析为私有(无论如何,get_object_vars不会返回它).
我知道的唯一一种方法 - 截取输出var_dump并解析它,但是我们很容易理解这不是我们编写脚本的方式=)
对不起,我的英语不好.