php5.5 では、yield の新機能が追加されました。クロージャを使用して Yield をシミュレートし、JS クロージャと PHP クロージャの違いを調べたいと思います。
<?php function php_shell(){ $arr = [9,8,7,6,5,4,3,2,1]; $func = function () use($arr){ //use(&$arr) 结果会不一样 return array_pop($arr); }; return $func; } $func = php_shell(); for($i = 0 ; $i <= 6; $i++){ echo $func(); echo "<br/>/r/n"; } ?> <script> function js_shell(){ var arr = [9,8,7,6,5,4,3,2,1]; var func = function(){ return arr.pop(); }; return func; } var func = js_shell(); for(var i = 0 ; i <= 6; i++){ console.log(func()); } </script>
結果のスクリーンショット (左側は PHP の結果、右側は JS の結果)
明らかです。JS と PHP ではクロージャー変数の処理に違いがあります。次に、参照を追加します。 PHP 匿名関数にシンボルを変数を使用しても、結果は同じです