小编pse*_*ant的帖子

JavaScript提升解释

下面的代码片段有什么区别?

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提升有关,但我对这个概念的理解恰恰相反.

javascript

47
推荐指数
2
解决办法
3029
查看次数

非阻塞pthread_join

我正在对多线程服务器的关闭进行编码.如果一切顺利,所有线程都应该自行退出,但是线程卡住的可能性很小.在这种情况下,使用非阻塞连接会很方便所以我能做到.

有没有办法做一个非阻塞的pthread_join?某种定时加入也会很好.

这样的事情:

foreach thread do
  nb_pthread_join();
    if still running
      pthread_cancel();

我可以考虑更多的情况,其中一个非bloking连接将是有用的.

因为似乎没有这样的功能所以我已经编写了一个解决方法,但它并不像我想的那么简单.

c multithreading pthreads

21
推荐指数
3
解决办法
3万
查看次数

为什么谷歌Chrome的Math.random数字生成器不*随机?

当我在各种浏览器中运行一些单元测试时,我今天遇到了一个奇怪的"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.

javascript random google-chrome

14
推荐指数
1
解决办法
8035
查看次数

为什么`.forEach`在密集数组上工作但在稀疏数组上不工作?

我试图理解'空'稀疏数组(例如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)

javascript arrays

5
推荐指数
1
解决办法
125
查看次数