小编Phi*_*ipp的帖子

Node和Chrome中的块范围内的const(V8)

我正在写一个nodejs(v4.2.4)应用程序,我遇到了一些奇怪的行为.

function A(number) {
 this.number = number;
}

for(var i = 0; i < 3; i++) {
  const a = new A(i);

  console.log(a.number);
}

const b = new A(99);
console.log(b.number);
Run Code Online (Sandbox Code Playgroud)

来自Java(和FireFox之一)的直觉是输出应该是

0
1
2
99
Run Code Online (Sandbox Code Playgroud)

但是,Node(和Chrome)给了我

0
0
0
99
Run Code Online (Sandbox Code Playgroud)

我调查和了解MSN -块范围var没有在JavaScript块范围.进一步看,MSN-const将const声明描述为具有块范围:

常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值来改变,也不能重新声明.

在这种情况下,我会说Node和Chrome(在这种情况下可能是V8),const在块范围内有一些阴暗的处理.但他们也写了这个

此声明创建一个常量,该常量可以是声明它的函数的全局变量或局部变量.

这是否意味着V8将每个const声明作为全局变量,而FireFox创建本地变量?如此重要的事情如何以不同的方式实施呢?

javascript scope v8 const node.js

4
推荐指数
1
解决办法
1044
查看次数

std :: begin()如何为内置类型工作?

假设我在下面的代码行使用std :: begin.

int myint[] ={1,2,3,4,5,6,7,8,9};
std::find(begin(myint),end(myint),9);
Run Code Online (Sandbox Code Playgroud)

现在std :: begin声明如下.

template< class C > 
auto begin( C& c ) -> decltype(c.begin());
Run Code Online (Sandbox Code Playgroud)

我无法理解,它是如何运作的?AFAIK,返回类型std :: begin是decltype(c.begin()),当C作为整数数组传递时,不会有任何带整数的begin函数.所以c.begin()应该无效?

c++ c++11

2
推荐指数
1
解决办法
173
查看次数

在lambda函数中生成用于dynamodb的唯一密钥

DynamoDB没有为您自动生成唯一密钥的选项。

在示例中,我看到人们从字段组合中创建uid,但是有没有办法为不具有任何值组合的数据创建唯一ID,该值可以充当唯一标识符?我的问题专门针对lambda函数。

我看到的一个选择是基于时间戳创建一个uuid,末尾带有一个计数器,将其插入(或检查它是否存在),并在重复的情况下尝试递增一次直到成功。但是,这意味着我可能会在不创建条目的情况下超出lambda函数的执行时间限制。

node.js amazon-dynamodb aws-lambda serverless

2
推荐指数
3
解决办法
4175
查看次数

标签 统计

node.js ×2

amazon-dynamodb ×1

aws-lambda ×1

c++ ×1

c++11 ×1

const ×1

javascript ×1

scope ×1

serverless ×1

v8 ×1