$.iter-detect.js 583 B

123456789101112131415161718192021
  1. var ITERATOR = require('./$.wks')('iterator')
  2. , SAFE_CLOSING = false;
  3. try {
  4. var riter = [7][ITERATOR]();
  5. riter['return'] = function(){ SAFE_CLOSING = true; };
  6. Array.from(riter, function(){ throw 2; });
  7. } catch(e){ /* empty */ }
  8. module.exports = function(exec, skipClosing){
  9. if(!skipClosing && !SAFE_CLOSING)return false;
  10. var safe = false;
  11. try {
  12. var arr = [7]
  13. , iter = arr[ITERATOR]();
  14. iter.next = function(){ return {done: safe = true}; };
  15. arr[ITERATOR] = function(){ return iter; };
  16. exec(arr);
  17. } catch(e){ /* empty */ }
  18. return safe;
  19. };