下面的代码片段有什么区别?
var a = 0;
function b(){
a = 10;
return function a(){};
}
b();
console.log(a); // => 10
Run Code Online (Sandbox Code Playgroud)
和
var a = 0;
function b(){
a = 10;
return
function a(){};
}
b();
console.log(a); // => 0
Run Code Online (Sandbox Code Playgroud)
它与JavaScript提升有关,但我对这个概念的理解恰恰相反.
我正在对多线程服务器的关闭进行编码.如果一切顺利,所有线程都应该自行退出,但是线程卡住的可能性很小.在这种情况下,使用非阻塞连接会很方便所以我能做到.
有没有办法做一个非阻塞的pthread_join?某种定时加入也会很好.
这样的事情:
foreach thread do nb_pthread_join(); if still running pthread_cancel();
我可以考虑更多的情况,其中一个非bloking连接将是有用的.
因为似乎没有这样的功能所以我已经编写了一个解决方法,但它并不像我想的那么简单.
当我在各种浏览器中运行一些单元测试时,我今天遇到了一个奇怪的"bug".我在今天之前已经多次在Firefox中运行测试,甚至IE,但显然还不是Chrome(v19-dev).当我在Chrome中运行它时,它始终无法通过一次测试,因为我计算的两个值不匹配.
当我真正挖掘正在发生的事情时,我意识到问题是我假设如果我填充一个具有100,000个Math.random()
值的数组,它们都将是唯一的(不会有任何冲突).事实证明,在Chrome中并非如此.
在Chrome中,我始终获得至少两对与100,000匹配的值.Firefox和IE9从未发生过冲突.这是我写的一个jsfiddle,用于测试它Math.random()
在数组中创建1M 条目:http://jsfiddle.net/pseudosavant/bcduj/
有谁知道这是为什么用于Chrome的伪随机数生成器Math.random
是真的不在于随机的?看起来这可能会对任何曾经使用的客户端js加密例程产生影响Math.random
.
我试图理解'空'稀疏数组(例如new Array(3)
)和等效'空'密集数组(具有3个未定义条目的数组)之间的区别.
我可以用这两种方式创建一个包含3个未定义值的数组:
var sparse = new Array(3);
// or
var sparse = [,,,];
var dense = Array.apply(null, Array(3)); // See dense array link below
Run Code Online (Sandbox Code Playgroud)
如果我为其中任何一个执行console.log,结果是:
[undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)
如果我遍历每个数组以将其与另一个数组进行比较,它们将严格匹配:
console.log(sparse.length === dense.length);
// true
for (var i = 0; i < dense.length; i++) {
console.log(i +':'+ (dense[i] === sparse[i]));
}
// '0:true'
// '1:true'
// '2:true'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用.forEach
(或map
,reduce
等),那么回调将永远不会在稀疏数组上调用,但会在密集数组上调用三次:
sparse.forEach(function(val,i){
console.log(i +':'+ val);
});
// Nothing. No-op.
dense.forEach(function(val,i){
console.log(i +':'+ val);
}); …
Run Code Online (Sandbox Code Playgroud)