php5.5新添加一個新特性 yeild 官方文檔,想用閉包模擬一下yeild,而後發現JS和PHP閉包的差異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結果)兩邊
shell
很明顯:JS和PHP在閉包的變量的處理有差別
再PHP匿名函數 use 變量加上引用符號,而後結果就是同樣的了閉包