ES6 for of 循环中函数调用可迭代

Hay*_*yan 1 javascript object ecmascript-6

寻找最佳实践建议。

将函数调用for of作为可迭代对象是一个好习惯吗?

const obj = {key1:'a', key2:'b'};

for(const i of Object.keys(obj)){ ... }
Run Code Online (Sandbox Code Playgroud)

或更好地拥有

const obj = {key1:'a', key2:'b'};
const allKeys = Object.keys(obj);
for(const i of allKeys){ ... }
Run Code Online (Sandbox Code Playgroud)

不是在循环的每次迭代中都会调用 Object.keys 函数吗?

mar*_*308 6

你可以通过模拟类似的案例来检查它

function A(){
    console.log('function called');
    return [1, 2, 3, 4, 5];
}

for(let i of A()){
    console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的 A() 只被调用一次