我正在学习ES6中的新功能.我有关于let的问题,它关注此代码:
for (let i = 0; i < 45; i++) {
var div = document.createElement('div');
div.onclick = function() {
alert("you clicked on a box #" + i);
};
document.getElementsByTagName('section')[0].appendChild(div);
}
Run Code Online (Sandbox Code Playgroud)
我对此代码感到困惑.在每个循环开始时声明的div对象发生了什么?这是一个全新的,单独的对象每次,不知何故被封闭在我的块范围内?或者这个div对象是否被覆盖,每次通过循环,如果是这样,它如何维持它与i的连接是通过let给出的?
我试图了解这条线的工作原理:
var dependencies = mod && mod.dependencies || [];
Run Code Online (Sandbox Code Playgroud)
这行代码存在于一个函数中,该函数将mod作为参数,mod是一个对象.我的理解是,首先它(顺便说一下,为了精确什么是"它"在这里?是"它"引擎?)将检查mod和mod.dependencies是否解析为true,如果是这样,|| 运算符将被短路并且mod.dependencies将返回.如果其中一个为false,则返回空数组.
但是,我不明白为什么它会同时寻找mod和mod.dependencies.没有mod可以存在mod.dependencies吗?为什么不只是寻找mod.dependencies?
我正在通过Nodeschool进行"功能性Javascript研讨会".其中一个练习的标题是"阻止事件循环",我很难理解它.通过以前的练习,我确保真正尝试理解解决方案,这样如果我不得不重做问题,我会理解如何解决它(而不是第一次破解它).但这个概念真的很挑战我.
修改样板中提供的递归重复函数,这样它就不会阻塞事件循环(即定时器和IO处理程序可以触发).这必然要求重复是异步的.
超时排队在100毫秒后触发,这将打印测试结果并退出该过程.repeat应该释放对事件循环的控制,以允许超时在所有操作完成之前中断.
尝试在超时发生之前执行尽可能多的操作!
样板
function repeat(operation, num) {
// modify this so it can be interrupted
if (num <= 0) return
operation()
return repeat(operation, --num)
}
module.exports = repeat
Run Code Online (Sandbox Code Playgroud)
解
function repeat(operation, num) {
if (num <= 0) return
operation()
// release control every 10 or so
// iterations.
// 10 is arbitrary.
if (num % 10 === 0) {
setTimeout(function() {
repeat(operation, --num)
})
} else {
repeat(operation, --num)
}
}
module.exports = repeat
Run Code Online (Sandbox Code Playgroud)
我试图更好地理解setTimeout,我有点理解它是如何工作的.但我不明白问题本身的一些语言和概念:
修改样板中提供的递归重复函数, 这样它就不会阻塞事件循环(即定时器和IO处理程序可以触发).这必然要求重复是异步的.
我不明白使每10次重复异步的解决方案如何阻止重复阻止事件循环.我假设事件循环和事件队列是一样的东西?例如,点击进入事件队列,而javascript代码通过其代码同步运行,直到执行堆栈为空,然后查看队列.如何使每10次重复异步防止队列被阻止 …