8个常见的JS经典问题( 二 )

展开语法 和 for-of 语句遍历 iterable对象 定义要遍历的数据 。Array 或 Map 是具有默认迭代行为的内置迭代器 。对象不是可迭代的,但是可以通过使用iterable和iterator协议使它们可迭代 。
在Mozilla文档中,如果一个对象实现了@@iterator方法,那么它就是可迭代的,这意味着这个对象(或者它原型链上的一个对象)必须有一个带有@@iterator键的属性,这个键可以通过常量Symbol.iterator获得 。
上述语句可能看起来有点冗长,但是下面的示例将更有意义:

8个常见的JS经典问题

文章插图
 
还可以使用 generator 函数来定制对象的迭代行为:
8个常见的JS经典问题

文章插图
 
7.打印的结果是什么知识点:
8个常见的JS经典问题

文章插图
 
for-in循环遍历对象本身的可枚举属性以及对象从其原型继承的属性 。可枚举属性是可以在for-in循环期间包含和访问的属性 。
【8个常见的JS经典问题】现在你已经掌握了这些知识,应该很容易理解为什么我们的代码要打印这些特定的属性:
8个常见的JS经典问题

文章插图
 
8.this 始终指向调用方法的对象在全局范围内初始化x时,它成为window对象的属性(不是严格的模式) 。看看下面的代码:
8个常见的JS经典问题

文章插图
 
可以断言:
window.x === 10; // truethis 始终指向调用方法的对象 。因此,在foo.getx()的例子中,它指向foo对象,返回90的值 。而在xGetter()的情况下,this指向 window对象, 返回 window 中的x的值,即10 。
要获取 foo.x的值,可以通过使用 Function.prototype.bind 将this的值绑定到foo对象来创建新函数 。
let getFooX = foo.getX.bind(foo);getFooX(); // 90



推荐阅读